HDU-1258(DFS搜索的问题)
来源:互联网 发布:搞笑网络剧排行榜 编辑:程序博客网 时间:2024/05/17 22:22
题目就是给了你一个非升序的数列,让你求出所有的可以得到的某个确定和的数列.
需要注意的有这么几点:1,题目中要求很严格,是不允许输出一样的序列的.所以,你就只能把相邻两个相等得给筛去,当然这是同一递归层才筛去,不是同一递归层的你不能筛去.就要用到一个一个语句了 if(a[i]!=a[i-1]||j==pos+1)就可以解决这个问题.两个条件中满足其中的一个就执行,但咱们所需要筛去的恰恰是这两个条件都满足.
还要注意的就是DFS()回溯的时候的参数问题. 你可千万别把sum算出来再传进去.那样你回溯回来的时候想再用sum可就不行了,你可以选择来个t保留一下,当然更好的选择是你传sum+a[i];
贴上代码:(找错误找了N久......泪奔)
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include <algorithm>using namespace std;int T,N;//SUM donates the sum of all the integers,N donates the number of input;int a[105];int rec[105];int temp;void DFS(int sta,int n,int sum){if(sum==T){temp=1;for(int i=1;i<=n;i++){printf(i==1?"%d":"+%d",a[rec[i]]);}puts("");return;}for(int j=sta+1;j<=N;j++){if(a[j]!=a[j-1]||j==sta+1){if(T>=sum+a[j]){rec[n+1]=j;DFS(j,n+1,sum+a[j]);}}}}int main(){while(scanf("%d%d",&T,&N),T|N){temp=0;a[0]=-1;for(int i=1;i<=N;i++){scanf("%d",&a[i]);}printf("Sums of %d:\n",T);DFS(0,0,0);if(temp==0)printf("NONE\n");}return 0;}
- HDU-1258(DFS搜索的问题)
- HDU 1016 搜索问题 dfs
- HDU 2553 N皇后问题 (搜索DFS)
- HDU-N皇后问题-DFS深度搜索
- HDU 1258 Sum it up 搜索DFS
- 搜索--HDU简单DFS
- HDU 1175(搜索DFS)
- hdu 2182 哈密顿绕行世界问题 搜索 dfs
- hdu 2553 N皇后问题 经典搜索,DFS解法
- DFS+记忆搜索-HDU-1078
- HDU 1242 Rescue (搜索 DFS)
- 【搜索】 HDU 2821 Pusher DFS
- HDU 1015 Safecracker DFS搜索
- 深度搜索DFS hdu-1010
- 深度搜索DFS hdu-1312
- HDU 1015 Safecracker(DFS搜索)
- hdu 5424(dfs搜索)
- hdu 1518 square (DFS)搜索
- UITextView控件的用法详解
- Android的一些属性----待续
- WinForm中MenuStrip动态菜单使用总结
- C Programming Language 1-14
- java编程将HTML文件转换成PDF文件
- HDU-1258(DFS搜索的问题)
- DataGridView取消默认选中行
- 编程珠玑第二章
- C# DataColumn
- D3D9 vs D3D1x
- 深入浅出FPGA-1-Cyclone芯片内部
- NET Win HTML Editor Control破解过程全记录
- Cosmos开发指南(一)
- 黑马程序员-java中的枚举