每一行都是一组测试案例   第一个数字 表示总和 第二个数字表示 一共有几个可用数据  现在 按照从小到大的顺序   输出  那些数字中若干数字之和为总和的  信息 /.

很好很明显的  遍历痕迹 , 多看多练

//   利用vector不定长数组  构图    然后就知道  某个节点相邻的 所有节点
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<string>
#include<sstream>
#include<map>
#include<cctype>
using namespace std;
int a[],n,b[],visited[],q,m,mark; // 一共有几个数字 ? 数字储存
void DFS(int s,int sum) // 先 弄第一个
{
if(sum>m) // 这种 剪枝 能有一个就有一个
return ;
if(sum==m) // 输出
{
printf("%d",b[]);
for(int i=;i<q;i++)
printf("+%d",b[i]);
printf("\n");
mark=;
return ;
}
for(int i=;i<=n;i++)
{
if(visited[i]) // 发现 已经 用过了 那就 直接下一步 吧 .
continue;
if(a[i]<=m-sum&&b[q-]>=a[i]) // 能放进去 并且 是递减顺序 // 根据题目中的 要求 来限定条件 搜索 也算是一种 模拟呀 .
{
visited[i]=;
sum+=a[i];
b[q++]=a[i];
DFS(s,sum);
q--;
sum-=a[i];
visited[i]=;
while(a[i]==a[i+]) /* 如果有两个相同的数字在一起 当以其中某一个数字为开头的话 从后面找到一个符合题意的解 轮到和这个数字相同的的数值的时候 会又出现以i从这样的情况所以需要直接这样跳过去*/
i++;            // 不过 如果跳的时候 需要实现 有序排列
}
} }
int main()
{
while(scanf("%d%d",&m,&n),(n||m))
{
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
printf("Sums of %d:\n",m);
memset(visited,,sizeof(visited));
mark=q=;
b[]=;
DFS(,);
if(mark)
printf("NONE\n");
}
}

人逢A题 , 精神爽 , 来一发改进版的 , 这个答案是做了http://www.cnblogs.com/A-FM/p/5334822.html  Stick神题得到的启示

 #include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<string>
#include<sstream>
#include<map>
#include<cctype>
using namespace std;
int n,m,a[],q,b[],visited[],flag;
void DFS(int sum,int mark,int index)
{
if(sum==m)
{
printf("%d",b[]);
for(int i=;i<mark;i++)
printf("+%d",b[i]);
printf("\n");
flag=;
}
if(sum>m)
return ;
for(int i=index;i<n;i++)
{
if(visited[i]||(a[i]==a[i-]&&!visited[i-])) // 这一个和上一个相同而且 上一个 没用 这个就也不用了
continue;
if(sum+a[i]<=m)
{
visited[i]=;
b[mark]=a[i];
DFS(sum+a[i],mark+,i+);
visited[i]=;
}
}
}
int main()
{
while(scanf("%d%d",&m,&n)&&(n||m))
{
for(int i=;i<n;i++)
scanf("%d",&a[i]);
memset(visited,,sizeof(visited));
printf("Sums of %d:\n",m);
flag=;
DFS(,,);
if(flag)
printf("NONE\n");
}
return ;
}

Sum It Up -- 深搜 ---较难的更多相关文章

  1. NYoj The partial sum problem(简单深搜+优化)

    题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=927 代码: #include <stdio.h> #include & ...

  2. 简单深搜:POJ1546——Sum it up

    结束了三分搜索的旅程 我开始迈入深搜的大坑.. 首先是一道比较基础的深搜题目(还是很难理解好么) POJ 1564 SUM IT UP 大体上的思路无非是通过深搜来进行穷举.匹配 为了能更好地理解深搜 ...

  3. (深搜)Sum It Up -- poj --1564

    链接: http://poj.org/problem?id=1564 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88230#probl ...

  4. USACO 2.3.3 Zero Sum 和为零(深搜枚举)

    Description 请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N. 现在请在数列中插入“+”表示加,或者“-”表示减,抑或是“ ”表示空白,来将 ...

  5. 2016弱校联盟十一专场10.2---Around the World(深搜+组合数、逆元)

    题目链接 https://acm.bnu.edu.cn/v3/problem_show.php?pid=52305 problem  description In ICPCCamp, there ar ...

  6. 2015暑假多校联合---Cake(深搜)

    题目链接:HDU 5355 http://acm.split.hdu.edu.cn/showproblem.php?pid=5355 Problem Description There are m s ...

  7. 深搜+回溯 POJ 2676 Sudoku

    POJ 2676 Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17627   Accepted: 8538 ...

  8. 【DFS深搜初步】HDOJ-2952 Counting Sheep、NYOJ-27 水池数目

    [题目链接:HDOJ-2952] Counting Sheep Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  9. poj 3249 Test for Job (记忆化深搜)

    http://poj.org/problem?id=3249 Test for Job Time Limit: 5000MS   Memory Limit: 65536K Total Submissi ...

随机推荐

  1. sql杂记:一些坑和数据库恢复

    这是一篇纯粹的乱七八糟的笔记...(勿喷)主要记录一下初入SQL坑的杂七杂八的注意事项. 一.先补充下事务的写法: start transaction;#开始事务 --各种事务... commit;# ...

  2. Eclipse中使用JRebel实现项目热部署(Maven插件版)

    JRebel实现项目热部署(Maven插件版) 热部署,就是在应用运行过程中不进行重启,可直接进行软件升级. 在开发过程中,热部署就是在项目运行过程中变更代码,无需重启服务器即可使代码生效. tomc ...

  3. java增强for循环中获取index

    java增强for循环中获取index http://rensanning.iteye.com/blog/2003205

  4. MongoDB怎么快速的删除数据库数据?

    我的mongodb里有10+数据库.现在需要重置这个环境,得到干净的没有数据的MongoDB.怎么快速安全的删除这些数据库数据呢? 记得首先备份你的数据库mongodump -o bakfolder ...

  5. opengl 对投影变化函数的理解

    投影变化分两种: 1 . 平行投影       2 . 透视投影 投影变化的设置一般放在reshape函数当中调用 每次要对投影变化进行操作的时候我们需要修改矩阵的变化模式,指定它为投影变化 glMa ...

  6. windows server 2008R2 上安装配置freesshd

    从FREESSHD官方网站下载最新的软件版本,下载地址是http://www.freesshd.com/?ctt=download 双击刚刚下载的freeSSHd.exe进行安装,安装时其他都是默认安 ...

  7. spring-quartz定时器简单用法

    基本配置: 1.quartz.properties #============================================================== #Configure ...

  8. 另一套备用的代码,通过service调用和登陆用户交互

    结合这两个东东,应该差不多可以搞定我需要的事情啦. 因为更改不了service代码,所以希望从service调用的代码里,争脱出来,和本地登陆用户进行交互启动. #include <window ...

  9. 5、Java并发性和多线程-相同线程

    以下内容转自http://tutorials.jenkov.com/java-concurrency/same-threading.html(使用谷歌翻译): 相同线程(同一线程)是一种并发模型,其中 ...

  10. 25、Java并发性和多线程-阻塞队列

    以下内容转自http://ifeve.com/blocking-queues/: 阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操 ...