码迷,mamicode.com
首页 > 其他好文 > 详细

1103 Integer Factorization

时间:2019-12-30 23:20:17      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:amp   back   跳过   ati   print   直接   ace   判断   元素   

#include<stdio.h>
#include<iostream> 
#include<vector>
using namespace std;
int n,p,k;
int facMaxSum = -1;
vector<int>preData,ans,tmpAns; 
int power(int a,int b){
	int sum = 1;
	while(b){
	sum*=a;
	b--;
	}
	return sum;
}
int Preprocessing(){
	int tmp = 0,index = 1;
	while(tmp<=n){//代码习惯,先判断,可以再插入 
			preData.push_back(tmp);
			tmp = power(index,p);
			index++;
	}
}
void dfs(int index,int tmpK,int tmpSum,int facMax){
	
		if(tmpK == k){
			if(tmpSum == n && facMax > facMaxSum){
					ans = tmpAns;
					facMaxSum = facMax;
			}
			return ;
		}	
		while(index >= 1){
			if(tmpSum + preData[index]<=n){
			
			tmpAns.push_back(index);
			dfs(index,tmpK+1,tmpSum+preData[index],facMax+index);
			tmpAns.pop_back();
			}
			index--; 
		}
}
int main()
{
	cin>>n>>k>>p;
	Preprocessing();
	dfs(preData.size()-1,0,0,0);
	if(facMaxSum == -1){
		printf("Impossible");
		return 0;
	}
	printf("%d =",n);
	for(int i=0;i<ans.size();i++){
		printf(" %d^%d%s",ans[i],p,i ==ans.size()-1?"":" +");
	}
	return 0;
}

  题目大意:

  将整数N 分成 k 个幂次为p的数的和,如果有多个解,取底数和最大的解;

     总结:

  1.待取的元素是i^p,是离散的,在枚举解的过程中不好直接获取,所以,程序开始前先预处理,求出n以内的所有的i^p,让后通过下标即可枚举

  2

int Preprocessing(){
	int tmp = 0,index = 1;
	while(tmp<=n){//代码习惯,先判断,可以再插入 
			preData.push_back(tmp);
			tmp = power(index,p);
			index++;
	}
}

  3.

**错误1**
语句1 如果为真跳过这次循环,但是下标更新在语句2,程序进入死循环
while(index >= 1){
		if(tmpSum + preData[index]>n)continue;//3. 当且仅当tempSum + v[index] <= n时,进行下一层的DFS,而不要进入下一层DFS发现不满足条件再返回,这样开销会比较大~
		tmpAns.push_back(index);
		dfs(index,tmpK+1,tmpSum+preData[index],facMax+index);
		tmpAns.pop_back();
		index--;//2 
	}

  4

if(tmpSum + preData[index]<=n)// 当且仅当tempSum + v[index] <= n时,进行下一层的DFS,而不要进入下一层DFS发现不满足条件再返回,这样开销会比较大~
		

  5

int facMaxSum = -1;
//对于更优解的判断,初始化为不可能解,这样既可以判断是否有解,是否是更优解

  

1103 Integer Factorization

标签:amp   back   跳过   ati   print   直接   ace   判断   元素   

原文地址:https://www.cnblogs.com/zxzmnh/p/12121864.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!