国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

1103. Integer Factorization (30)

2019-11-08 02:55:28
字體:
來源:轉載
供稿:網友

1103. Integer Factorization (30) 分析:顯然有明顯的遞歸特征:計算n,k,p,實際上只需求出n-i^p,k-1,p;考察回溯; 思路:每次保存該條路徑,直至當前情況的遞歸終止,遞歸終止時,判斷是否滿足題設條件;用vmax記錄最大因子序列和值,cmax記錄當前的最大因子序列和值 幾個小技巧: 1.每次從當前點s開始向后推演因子,而不是從1到n整個進行計算,可以排除重復的數據,降低了遞歸次數,節省了運算時間(讀者可以自己想為什么); 2.初始值從n(s=n)開始逐漸遞減而不是從1(s=1)開始往后遞增減少了題目要求的非遞增排序過程,即所得的結果已經排好序;

#include <vector>#include <iostream>#include <algorithm>#include <cmath>using namespace std;int vmax=-1,cmax=0;vector<int> cv;vector<vector<int>> ans;bool comp(const vector<int> a,const vector<int> b){ int i=0,len=(a.size()<b.size())?a.size():b.size(); while(i<len&&a[i]==b[i]) ++i; return a[i]>b[i];}void Calculate(int n,int k, int p,int s){ if(n<0||k<0)return; if(n==0&&k==0) { if(vmax<cmax) { ans.clear(); vmax=cmax; ans.push_back(cv); } else if(vmax==cmax) ans.push_back(cv); return; } for(int i=s;i>=1;--i) { cv.push_back(i); cmax+=i; Calculate(n-(int)pow(i*1.0,p*1.0),k-1,p,i); cv.pop_back(); cmax-=i; }}int main(){ int n,k,p; cin>>n>>k>>p; Calculate(n,k,p,n); if(!ans.size()){cout<<"Impossible";return 0;} sort(ans.begin(),ans.end(),comp); cout<<n<<" = "; for(auto it=ans[0].begin();it!=ans[0].end();++it) it!=ans[0].end()-1?cout<<*it<<"^"<<p<<" + ":cout<<*it<<"^"<<p;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿拉善盟| 姚安县| 尉犁县| 嵊泗县| 泸水县| 南平市| 南陵县| 湟源县| 赞皇县| 兴山县| 华安县| 穆棱市| 新巴尔虎右旗| 临澧县| 襄汾县| 乐业县| 开封市| 政和县| 西乌| 正安县| 梁河县| 平遥县| 元阳县| 金乡县| 太原市| 桃江县| 民乐县| 讷河市| 叙永县| 东海县| 永城市| 铜鼓县| 五莲县| 滦平县| 汨罗市| 宣化县| 麻江县| 东阿县| 洪雅县| 乌拉特前旗| 梨树县|