【HDOJ】1258 Sum It Up
2014-03-23 11:49
405 查看
典型的深搜,剪枝的时候需要跳过曾经搜索过的相同的数目,既满足nums[i]=nums[i-1]&&visit[i-1]==0,visit[i-1]==0可以说明该点已经测试过。
#include <stdio.h> #include <string.h> #define MAXNUM 1005 int nums[MAXNUM]; int visit[MAXNUM]; int t, n; void output() { int i, j=0; for (i=0; i<t; ++i) { if (j && visit[i]) printf("+%d", nums[i]); if (j==0 && visit[i]) { printf("%d", nums[i]); j = 1; } } printf("\n"); } int check(int index, int sum) { if (index<0 || index>=t || visit[index] || sum+nums[index]>n) return 0; return 1; } int dfs(int beg, int sum) { int i, val=0; if (sum == n) { output(); return 1; } for (i=beg; i<t; ++i) { if (i>beg && nums[i]==nums[i-1] && visit[i-1]==0) continue; if (check(i, sum)) { visit[i] = 1; if (dfs(i+1, sum+nums[i])) val = 1; visit[i] = 0; } } return val; } int main() { int i; while (scanf("%d%d", &n, &t)!=EOF && (n||t)) { for (i=0; i<t; ++i) scanf("%d", &nums[i]); memset(visit, 0, sizeof(visit)); printf("Sums of %d:\n", n); if ( !dfs(0, 0) ) printf("NONE\n"); } return 0; }
相关文章推荐
- 25个最佳的 WordPress Gallery 画廊插件
- 3-4-长方柱类
- LeapYear先行版
- 经典区间DP
- 【HDOJ】1262 寻找素数对
- Unity3D学习笔记【01】
- 给repeater添加序号
- 字符串匹配动态规划
- 解决OpenCV在使用摄像头捕捉视频流时出现的一个奇怪问题
- require和require_once的区别
- Mysql Oracle sqlserver 数据分页查询语句
- Floyd求最小环
- 10. python
- I18N与Struts2
- 抽象递推动规
- 经典c程序(0015)---正整数分解质因数
- 二维动规思想, j 没有明显枚举特征
- 读取、显示、保存图片
- Visual Studio 2010支持的断言及相关解释
- Java并发之线程异常捕获