nyoj927(01背包的思想)
2014-07-10 19:04
246 查看
题目链接:click here~利用01背包的思想,对于每件物品取或不取,然后进行深搜即可。此题是借鉴别人的代码,自己也不是特别懂深搜,希望和大家一块儿学习。代码如下:
01.
#include<stdio.h>
02.
#include<string.h>
03.
#include<algorithm>
04.
using
namespace
std;
05.
int
a[23],n,sum;
06.
int
dfs(
int
k,
int
s)
07.
{
08.
if
(s==sum)
09.
return
1;
10.
if
(k==n||(s>sum&&s>0)||(a[k]>sum&&sum>0))
//此处进行剪枝
11.
return
0;
12.
if
(dfs(k+1,s+a[k])||dfs(k+1,s))
//利用01背包的思想,对于一件物品来说要么选,要么不选
13.
return
1;
14.
return
0;
15.
}
16.
int
main()
17.
{
18.
while
(
scanf
(
"%d"
,&n)!=EOF)
19.
{
20.
for
(
int
i=0;i<n;i++)
21.
scanf
(
"%d"
,&a[i]);
22.
scanf
(
"%d"
,&sum);
23.
if
(dfs(0,0))
24.
printf
(
"Of course,I can!\n"
);
25.
else
26.
printf
(
"Sorry,I can't!\n"
);
27.
28.
}
29.
}
相关文章推荐
- nyoj 又见01背包
- NYOJ 2126 Buy souvenirs(01背包+输出方案数)
- NYOJ 860 又见01背包
- nyoj 又见01背包
- Nyoj 860 又见01背包[背包变形]
- nyoj 860 又见01背包(01 背包)
- NYOJ-860-又见01背包
- 01背包问题 nyoj 289 hdoj 2546
- NYOJ 860 又见01背包
- nyoj 又见01背包
- nyoj 203 三国志 dijkstra+01背包
- NYOJ又见01背包
- POJ1745Divisibility(01背包思想)
- NYOJ 860 又见01背包
- NYOJ 860 又见01背包【01】
- nyoj 860 又见01背包 【另类01背包】
- NYOJ 860 又见01背包
- nyoj 又见01背包
- NYOJ-860 又见01背包
- NYOJ D. 又见01背包