您的位置:首页 > 其它

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.
}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: