A1103 Integer Factorization (30分)(DFS)
一、技术总结
- 这题是关于DFS即深度优先遍历算法,核心是掌握深度遍历算法的思想,也就是不断往下一个结点进行查找,如果查找不到,那么就返回;
- 关键点一个是递归边界,也就是查找不到的条件,以及能够往下查找的路有多少条;
二、参考代码
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int n, k, p, maxFacSum = -1;
vector<int> v, ans, tempAns;
void init(){
int temp = 0, index = 1;
while(temp <= n){
v.push_back(temp);
temp = pow(index, p);
index++;
}
}
void dfs(int index, int tempSum, int tempK, int facSum){
if(tempK == k){
if(tempSum == n && facSum > maxFacSum){
ans = tempAns;
maxFacSum = facSum;
}
return;
}
while(index >= 1){
if(tempSum + v[index] <= n){
tempAns[tempK] = index;
dfs(index, tempSum + v[index], tempK + 1, facSum + index);
}
if(index == 1) return;
index--;
}
}
int main(){
scanf("%d%d%d", &n, &k, &p);
init();
tempAns.resize(k);
dfs(v.size() - 1, 0, 0, 0);
if(maxFacSum == -1){
printf("Impossible");
return 0;
}
printf("%d = ", n);
for(int i = 0; i < ans.size(); i++){
if(i != 0) printf(" + ");
printf("%d^%d", ans[i], p);
}
return 0;
}
作者:睿晞
身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
曾有一个业界大牛说过这样一段话,送给大家:
“华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.