#include <cstdio>
#include <vector>
#include <cmath>
using namespace std;
int n, k, p;
vector<int> v, t;
int m = -1;
void DFS(int index, int nowk, int sum, int sumf){
if(sum==n && nowk==k){
if(sumf > m){
m = sumf;
t = v;
}
return;
}
if(index==0 || sum>n || nowk>k) return;
v.push_back(index);
int next = pow(index, p);
DFS(index, nowk+1, sum+next, sumf+index);
v.pop_back();
DFS(index-1, nowk, sum, sumf);
}
int main(){
scanf("%d %d %d", &n, &k, &p);
int sqr = (int)sqrt(1.0*n);
DFS(sqr, 0, 0, 0);
if(t.size() == 0){
printf("Impossible");
return 0;
}
printf("%d = ", n);
for(vector<int>::iterator it=t.begin(); it!=t.end(); it++){
printf("%d^%d", *it, p);
if(it != t.end()-1){
printf(" + ");
}
}
return 0;
}
今天刚开始学DFS算法,居然一次AC了!!!而且还是PAT甲级的压轴题!!!超级开心!!!