1103 Integer Factorization (30 分)
思路
DFS结合vector
代码
#include<bits/stdc++.h>
using namespace std;
int n,k,p,maxFacSum = -1;
vector<int>fac,ans,temp;
void init(){
int i =0,temp = 0;
while(temp <= n)
{
fac.push_back(temp);
temp = pow(++i,p);
}
}
void DFS(int index,int nowK,int sum,int facSum)//nowK记录多少个,sum记录目标值,facSum记录所有选择数字的总和
{
if(sum==n && nowK ==k)
if(facSum>maxFacSum){
ans =temp;
maxFacSum =facSum;
}
if(sum>n || nowK>k)return; //递归停止条件
if(index -1 >=0)
{
temp.push_back(index);//放该数
DFS(index,nowK+1,sum+fac[index],facSum+index);
temp.pop_back(); //不放该数
DFS(index-1,nowK,sum,facSum);
}
}
int main(){
scanf("%d%d%d",&n,&k,&p);
init();
DFS(fac.size()-1,0,0,0);
if(maxFacSum == -1)cout<<"Impossible"<<endl;
else{
cout<<n<<" =";
for(int i =0;i<ans.size();i++)
{
if(i==ans.size()-1)printf(" %d^%d\n",ans[i],p);
else printf(" %d^%d +",ans[i],p);
}
}
}