#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
using namespace std;
vector<int>temp,ans,fac;
int s,n,p,maxn = -1;
int power(int x)
{
int ans = 1;
for(int i = 0;i<p;i++)
{
ans *= x;
}
return ans;
}
void init()
{
int i = 0;
int temp = 0;
while(temp<=s)
{
fac.push_back(temp);
temp = power(++i);
}
}
void DFS(int index,int nowk,int sum,int facsum)
{
if(nowk == n && facsum == s)
{
if(maxn < sum)
{
maxn = sum;
ans = temp;
}
return;
}
if(nowk > n || facsum > s) return;
if(index > 0)
{
temp.push_back(index);
DFS(index,nowk + 1,sum + index,facsum + fac[index]);
temp.pop_back();
DFS(index - 1,nowk,sum,facsum);
}
}
int main()
{
// freopen("in.txt","r",stdin);
scanf("%d%d%d",&s,&n,&p);
init();
DFS(fac.size() - 1,0,0,0);
if(maxn == -1)
printf("Impossible");
else
{
printf("%d = ",s);
for(int i = 0;i<ans.size();i++)
{
printf("%d^%d",ans[i],p);
if(i != ans.size() - 1)
printf(" + ");
}
}
return 0;
}
8.1 1103 Integer Factorization (30 分)(******)
猜你喜欢
转载自blog.csdn.net/qq_15556537/article/details/99674584
今日推荐
周排行