您的位置:首页 > 其它

1103. Integer Factorization (30) PAT 甲级

2017-02-21 14:27 351 查看
传送门

#include<stdio.h>
#include<vector>
#include<algorithm>
#include<math.h>
#include<stdlib.h>
using namespace std;

vector<int> v,fac,ans;
int n,k,p;

int maxfacnum=-1;

void init(){
int i=0;
int temp=0;
while(temp<=n){
v.push_back(temp);
temp=pow(++i,p);
}
}

void DFS(int index,int nowK,int sum,int facSum){
if(nowK==k&&sum==n){
if(facSum>maxfacnum){
ans=fac;
maxfacnum=facSum;
}
return ;
}
if(sum>n||nowK>k)   return ;
if(index>=1){
fac.push_back(index);
DFS(index,nowK+1,sum+v[index],facSum+index);
fac.pop_back();
DFS(index-1,nowK,sum,facSum);
}
}

int main(){
scanf("%d%d%d",&n,&k,&p);
init();
DFS(v.size()-1,0,0,0);
if(maxfacnum==-1){
printf("Impossible");
}
else{
printf("%d = %d^%d",n,ans[0],p);
for(int i=1;i<ans.size();i++){
printf(" + %d^%d",ans[i],p);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: