nyoj1058部分和问题(基于01背包的思想)
来源:互联网 发布:java里distinct 编辑:程序博客网 时间:2024/05/27 00:41
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1058
题目解析:01背包的思想,对于每个数选择取或不取,然后用栈保存沿途的数。
代码如下:
01.
#include<cstdio>
02.
#include<cstring>
03.
#include<stack>
04.
using
namespace
std;
05.
int
n,k;
06.
int
f[23];
07.
stack<
int
>s;
//用栈保存需要用到的数
08.
bool
dfs(
int
i,
int
sum)
//一个用来代表所选数的个数,一个代表当前得到的和
09.
{
10.
if
(i==n)
11.
{
12.
if
(sum==k)
return
true
;
13.
return
false
;
14.
}
15.
if
(dfs(i+1,sum))
return
true
;
//不取当前数字
16.
if
(dfs(i+1,sum+f[i]))
17.
{
18.
s.push(f[i]);
19.
return
true
;
20.
}
21.
}
22.
int
main()
23.
{
24.
while
(
scanf
(
"%d%d"
,&n,&k)!=EOF)
25.
{
26.
for
(
int
i=0;i<n;i++)
27.
scanf
(
"%d"
,&f[i]);
28.
if
(dfs(0,0))
29.
{
30.
printf
(
"YES\n"
);
31.
while
(!s.empty())
32.
{
33.
printf
(
"%d "
,s.top());
34.
s.pop();
35.
}
36.
printf
(
"\n"
);
37.
}
38.
else
39.
printf
(
"NO\n"
);
40.
}
41.
return
0;
42.
}
0 0
- nyoj1058部分和问题(基于01背包的思想)
- nyoj1058部分和问题
- nyoj1058 部分和问题
- nyoj1058 部分和问题
- nyoj1058 部分和问题
- NYOJ1058部分和问题
- NYOJ1058 部分和问题
- NYOJ1058 部分和问题
- nyoj1058 部分和问题
- [NYOJ1058]部分和问题
- nyoj1058 部分和问题 dfs
- 部分和问题 NYOJ1058 简单深搜
- nyoj1058部分和问题(DFS)
- NYOJ1058部分和问题(dfs)
- NYOJ1282 NYOJ1058 部分和问题(DFS)
- nyoj1058部分和问题(简单基础易上手的dfs)
- 搜索学习(3)--NYOJ1058--部分和问题
- 01背包和部分背包问题
- 一些iOS高效开源类库
- SQL Server 致程序员(容易忽略的错误)
- 各种主流数据库的比较
- note拆机方法
- getApplication 和 context 的区别
- nyoj1058部分和问题(基于01背包的思想)
- Shell编程
- Gradle 1.12 翻译——第十五章. 任务详述
- 第253天(25W+4)
- VMware vCenter FT 容错详解
- JQuery上传插件Uploadify使用详解
- 镶嵌数据集工具小结(七)色彩平衡与接缝线 Ⅰ
- VMware HA与VMware FT对比
- hadoop集群配置机架感知