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

A1103 Integer Factorization (30分)(DFS)

时间:2020-07-02 21:44:59      阅读:55      评论:0      收藏:0      [点我收藏+]

标签:深度优先   resize   stream   printf   递归   总结   深度优先遍历   ace   index   

一、技术总结

  1. 这题是关于DFS即深度优先遍历算法,核心是掌握深度遍历算法的思想,也就是不断往下一个结点进行查找,如果查找不到,那么就返回;
  2. 关键点一个是递归边界,也就是查找不到的条件,以及能够往下查找的路有多少条;

二、参考代码

#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int n, k, p, maxFacSum = -1;
vector<int> v, ans, tempAns;
void init(){
	int temp = 0, index = 1;
	while(temp <= n){
		v.push_back(temp);
		temp = pow(index, p);
		index++;
	} 
}
void dfs(int index, int tempSum, int tempK, int facSum){
	if(tempK == k){
		if(tempSum == n && facSum > maxFacSum){
			ans = tempAns;
			maxFacSum = facSum;
		}
		return;
	}
	while(index >= 1){
		if(tempSum + v[index] <= n){
			tempAns[tempK] = index;
			dfs(index, tempSum + v[index], tempK + 1, facSum + index);
		}
		if(index == 1) return;
		index--;
	}
}
int main(){
	scanf("%d%d%d", &n, &k, &p);
	init();
	tempAns.resize(k);
	dfs(v.size() - 1, 0, 0, 0);
	if(maxFacSum == -1){
		printf("Impossible");
		return 0;
	}
	printf("%d = ", n);
	for(int i = 0; i < ans.size(); i++){
		if(i != 0) printf(" + ");
		printf("%d^%d", ans[i], p);
	}
	return 0;
}

A1103 Integer Factorization (30分)(DFS)

标签:深度优先   resize   stream   printf   递归   总结   深度优先遍历   ace   index   

原文地址:https://www.cnblogs.com/tsruixi/p/13226914.html

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