因为本题有一个index变成index-1的过程,所以这个index一定要大于0,而index内容最小的值为1,所以要注意v的取值
#include<cstdio>
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int n,k,p,maxF=-1;
vector<int> v,ans,temp;
void init()
{
int t=0,cnt=1;
while(t<n)
{
v.push_back(t);
t=pow(cnt++,p);
}
}
void DFS(int index,int nowK,int nowN,int sumF)
{
if(nowK==k&&nowN==n)
{
if(sumF>maxF)
{
maxF=sumF;
ans=temp;
}
return ;
}
if(nowK>k||nowN>n)return;
if(index>0)
{
temp.push_back(index);
DFS(index,nowK+1,nowN+v[index],sumF+index);
temp.pop_back();
DFS(index-1,nowK,nowN,sumF);
}
}
int main()
{
cin>>n>>k>>p;
init();
DFS(v.size()-1,0,0,0);
if(maxF==-1)
printf("Impossible");
else
{
printf("%d = ",n);
for(int i=0;i<ans.size();i++)
{
printf("%d^%d",ans[i],p);
if(i!=ans.size()-1)
printf(" + ");
}
}
}