题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=289
题目解析:最基础的01背包问题,可以用dp解决,也可以用搜索解决,(有些背包问题只能用搜索解决,比如当背包容量特别大的时候)。
超时代码如下:
#include<cstdio>
02.
#include<cstring>
03.
int
n;
04.
int
m;
05.
int
best;
06.
int
v[1010];
07.
int
w[1010];
08.
void
dfs(
int
i,
int
cv,
int
cw)
09.
{
10.
if
(i>n)
11.
{
12.
if
(cv>best) best=cv;
13.
return
;
14.
}
15.
if
(cw+w[i]<=m)
16.
dfs(i+1,cv+v[i],cw+w[i]);
17.
dfs(i+1,cv,cw);
18.
}
19.
int
main()
20.
{
21.
while
(
scanf
(
"%d%d"
,&n,&m)!=EOF)
22.
{
23.
for
(
int
i=0;i<n;i++)
24.
scanf
(
"%d%d"
,&w[i],&v[i]);
25.
best=0;
26.
dfs(0,0,0);
27.
printf
(
"%d\n"
,best);
28.
}
29.
return
0;
30.
}