DFS很简单的,lz只是想抒发感慨所以才po代码
int num, k, p;
int factor[400];
vector<int> ans, ans_temp;
int Max = 0;
void dfs(int tot, int sum, int index, int level){
if(level > k) return;
if(level == k){
if(tot == num){
if(sum > Max){
ans = ans_temp;
Max = sum;
}
}
}
else{
if(tot >= num) return;
for(int i = index; i>= 1; i--){
ans_temp.push_back(i);
dfs(tot + factor[i], sum + i, i, level+1);
ans_temp.pop_back();
}
}
}
int main(){
cin>>num>>k>>p;
int n = 1;
while(pow(n, p) <= num) {factor[n] = (int)pow(n, p); n++;}
for(int i = n-1; i>=1; i--){
ans_temp.push_back(i);
dfs(factor[i], i, i, 1);
ans_temp.pop_back();
}
if(ans.empty()) cout<<"Impossible\n";
else{
auto it = ans.begin();
printf("%d = %d^%d", num, *it, p); it++;
while(it != ans.end()){
printf(" + %d^%d", *it, p);
it++;
}
}
return 0;
}
tb逛了逛泳衣,放下了晚饭的念头,按照现在的婚配观,lz是要绝后啊不行要夹缝中求生存穿上运动裤去跑步了。��