hdu 1258 DFS
Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u
Description
Input
Output
Sample Input
4 6 4 3 2 2 1 1
5 3 2 1 1
400 12 50 50 50 50 50 50 25 25 25 25 25 25
0 0
Sample Output
Sums of 4:
4
3+1
2+2
2+1+1
Sums of 5:
NONE
Sums of 400:
50+50+50+50+50+50+25+25+25+25
50+50+50+50+50+25+25+25+25+25+25
题意比较好懂,解析见代码
代码:
/*
hdu1258
dfs,小数据,dfs暴力搜一遍即可,之前一直做一些图的题目,这算是做的
第一道比较抽象的dfs题目,dfs最重要的思想是递归与回溯来实现状态的转移,是
一种暴力的搜索手段,适用于小数据的情况
*/
#include<iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
using namespace std;
const int maxn=15;
const double epi=1e-8;
const double pi=acos(-1.0);
int a[maxn],b[maxn];
bool v[maxn];//标记数组,避免在一次搜索中重复搜索
int tar,n;
bool flag;
void dfs(int sum,int pos,int ans)//三个参数,sum代表当前层计数总和,判断递归是否结束的标志,pos储存下一次从哪一个位置开始搜索
{
int i;
if(sum>tar) return;
if(sum==tar)
{
flag=true;
for(int i=1;i<=ans;i++)
printf((i==ans)?"%d\n":"%d+",b[i]);//输出注意格式
}
int last=-1;
for(i=pos+1;i<=n;i++)
{
if(!v[i]&&a[i]!=last)
{
b[ans+1]=a[i];
last=a[i];
v[i]=true;
dfs(sum+a[i],i,ans+1);
v[i]=false;
}
}
}
int main()
{
while(scanf("%d%d",&tar,&n)&&(tar||n))
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(v,false,sizeof(v));
cout<<"Sums of "<<tar<<":"<<endl;
flag=false;//判断是否找到答案
dfs(0,0,0);
if(!flag)
cout<<"NONE"<<endl;
}
}
hdu 1258 DFS的更多相关文章
- poj1564 Sum It Up (zoj 1711 hdu 1258) DFS
POJhttp://poj.org/problem?id=1564 ZOJhttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=711 ...
- HDOJ(HDU).1258 Sum It Up (DFS)
HDOJ(HDU).1258 Sum It Up (DFS) [从零开始DFS(6)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双 ...
- HDU 5143 DFS
分别给出1,2,3,4 a, b, c,d个 问能否组成数个长度不小于3的等差数列. 首先数量存在大于3的可以直接拿掉,那么可以先判是否都是0或大于3的 然后直接DFS就行了,但是还是要注意先判合 ...
- Snacks HDU 5692 dfs序列+线段树
Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...
- hdu 1258 Sum It Up(dfs+去重)
题目大意: 给你一个总和(total)和一列(list)整数,共n个整数,要求用这些整数相加,使相加的结果等于total,找出所有不相同的拼凑方法. 例如,total = 4,n = 6,list = ...
- HDU 1258 Sum It Up(dfs 巧妙去重)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1258 Sum It Up Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 2266 dfs+1258
How Many Equations Can You Find Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- hdu 1258 Sum It Up (dfs+路径记录)
pid=1258">Sum It Up Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- (step4.3.4)hdu 1258(Sum It Up——DFS)
题目大意:输入t,n,接下来有n个数组成的一个序列.输出总和为t的子序列 解题思路:DFS 代码如下(有详细的注释): #include <iostream> #include <a ...
随机推荐
- unresolved import 解决办法
安装paramiko 需要先安装另两个模块 安装时未注意32bit,安装了64的,本地python是32的所以出错,重装后报错unresolved import,环境是eclipse(pydev) 用 ...
- 如何监听input的脚本赋值
今天记录下我解决input值改变监听,大家肯定首先想到onchange方法.对于实时监听改变用onpropertychange.oninput等方法:可是,onchange并不能监听脚本改变的值,对于 ...
- Oracle RAC 环境下的连接管理
http://blog.csdn.net/cyxlxp8411/article/details/7634003
- Windows 8.1 explorer.exe总是崩溃的解决办法
方法1 卸载此补丁 KB3033889 方法2 打补丁, 更新 3033889 导致使用日语. 朝鲜语和中文输入法的系统中 Windows 资源管理器停止响应 https://support.micr ...
- SRM 597DIV1
250: 首先先特判答案不存在的情况. 再设答案为k,则B[k+1,n]是A的一个子序列,所以, 做法1,枚举k检查子序列是否成立; 做法2,反过来想,从后往前看,最长的一个子序列对应了最小答案. 6 ...
- [置顶] 单片机C语言易错知识点经验笔记
今天写这一篇文章并不是因为已经想好了一篇文章才写下来,而是我要将这一篇文章作为一个长期的笔记来写,我会一直更新.在进行单片机开发时,经常都会出现一些很不起眼的问题,这些问题其实都是很基础的c语言知识点 ...
- phpcms:四、尾部包含
四.尾部包含1.包含尾部文件:{template "content","footer"}2.栏目列表调用(关于我们| 联系方式| 版权声明| 招聘信息|):{p ...
- Android 读取手机SD卡根目录下某个txt文件的文件内容
1.先看activity_main.xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/and ...
- 用java流方式判断文件类型
这个方法只能在有限的范围内有效.并不是万金油 比如 图片类型判断,音频文件格式判断,视频文件格式判断等这种肯定是2进制且专业性很强的文件类型判断. 下面给出完整版代码 首先是文件类型枚取 packag ...
- css如何使背景图片水平居中
CSS中定位背景图片的属性是:background-position,用法background-position 属性设置背景图像的起始位置. 你要水平居中可以: div{background-pos ...