HDU 1258 Sum It Up 深搜
2012-09-11 13:20
288 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1258
题意:
第一个数为sum,第二数N为后面有长度为N的序列(后一项小于等于前一项),要在这个序列中找出一组数加起来
等于sum。
坑爹:
要输出所有的情况,但不能重复。
解法:
用DFS的时候每次按顺序在num数组中找到一个值然后判断有没超过sum,没有的话就把它记录在save数组中,
然后再用review记录当前num[ i ] 的值,这样的话在DFS完成之后再找下一个值进行试探的时候就要判断是否与
review的值相同,相同的话就不用再进行DFS了(序列是严格的后一项小于等于前一项,所有review的值一旦改变了
就不会出现之前出现过的值了)。
View Code
题意:
第一个数为sum,第二数N为后面有长度为N的序列(后一项小于等于前一项),要在这个序列中找出一组数加起来
等于sum。
坑爹:
要输出所有的情况,但不能重复。
解法:
用DFS的时候每次按顺序在num数组中找到一个值然后判断有没超过sum,没有的话就把它记录在save数组中,
然后再用review记录当前num[ i ] 的值,这样的话在DFS完成之后再找下一个值进行试探的时候就要判断是否与
review的值相同,相同的话就不用再进行DFS了(序列是严格的后一项小于等于前一项,所有review的值一旦改变了
就不会出现之前出现过的值了)。
View Code
#include<iostream> using namespace std; const int maxn = 12 + 10; const int INF = 0x3fffffff; int num[maxn]; int save[maxn]; int T; int n; int mark; void DFS(int sum,int num_mark,int save_mark) { if(sum == T) //找到一组解 { mark = 1; int i; for(i=1; i<save_mark; i++) { cout<<save[i]; if(i != save_mark - 1) { cout<<"+"; } else { cout<<endl; } } return ; } if(sum > T) { return ; } int i; int review = INF; for(i=num_mark; i<=n; i++) { if(sum + num[i] <= T && review != num[i]) { sum = num[i] + sum; save[save_mark] = num[i]; review=num[i]; DFS(sum,i+1,save_mark+1); //因为序列是递减的,就算找不到review也不用还原,review更新过了就不会在遇到之前的值了. sum = sum - num[i]; } } } int main() { while(cin>>T>>n,n&&T) { int i; for(i=1; i<=n; i++) { cin>>num[i]; } mark = 0; cout<<"Sums of "<<T<<":"<<endl; DFS(0,1,1); if(!mark) { cout<<"NONE"<<endl; } } return 0; }
相关文章推荐
- HDU 1258 (DFS) Sum It Up
- HDU 1258 Sum It Up(DFS)
- hdu 1258 Sum It Up (dfs+路径记录)
- HDU 1258 Sum It Up
- HDU 1258 Sum It Up
- HDU 1258 Sum It Up
- hdu 1258 Sum It Up
- hdu-1258 Sum It Up(简单深搜)
- HDU 1258 Sum It Up(Dfs)
- HDU-1258-Sum It Up
- hdu 1258 Sum It Up(dfs)
- Poj 1564 || HDU 1258 Sum It Up(dfs+技巧)
- hdu 1258 Sum It Up(回溯算法)
- poj1564 Sum It Up (zoj 1711 hdu 1258) DFS
- HDu 1258 Sum It Up (还是DFS)
- poj1564 Sum It Up (zoj 1711 hdu 1258) DFS
- HDU 1258-Sum It Up(dfs)
- hdu 1258 Sum It Up(dfs)
- [置顶] hdu-1258 Sum It Up(dfs+去重)
- HDU 1258:Sum It Up