A1103 Integer Factorization

#include<cstdio>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;

int n,k,p,maxFacSum=-1;
vector<int> fac,temp,ans;

void init()
{
	int i=1;
	double temp=0;
	while(temp<=n)
	{
		fac.push_back(temp);
		temp=pow(i,p);
		i++;
	}
}
void DFS(int index,int nowK,int sum,int facSum)
{
	if(sum==n&&nowK==k)  ///miss==  error:non-Ivalue in assignment
	{
		if(facSum>maxFacSum)
		{
			ans=temp;
			maxFacSum=facSum;
		}
		return;
	}
	if(sum>n||nowK>k) return;
	if(index>1)
	{
		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) printf("Impossible\n");
	else
	{
		printf("%d=%d^%d",n,ans[0],p);
		for(int i=1;i<ans.size();i++)
		 printf("+%d^%d",ans[i],p);
	}
	return 0;
}

講真,到了提高篇真心好難啊,答案是一回事,自己寫就是另一回事了,桑心~~~


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章