HDOJ搜索专题之Accept Necklace

题目大意:跟01背包模型有点像,区别在于01背包对选取的物品个数没有要求,而这题给出了选的个数。N最大为20,所以可以暴力过。

经测试N最大好像是21,定义成20会WA

View Code
 1 #include <stdio.h>
 2 #define N 21
 3 #define INF 0x7fffffff
 4 int v[N],w[N],n,m,cnt,vmax,wmax;
 5 void dfs(int k,int vsum,int wsum)
 6 {
 7   if(cnt==m)
 8   {
 9     if(wsum<=wmax && vsum>vmax) vmax=vsum;
10     return;
11   }
12   for(int i=k+1;i<n;i++)
13   {
14     cnt++;
15     dfs(i,vsum+v[i],wsum+w[i]);
16     cnt--;
17   }
18 }
19 int main()
20 {
21   int t;
22   scanf("%d",&t);
23   while(t--)
24   {
25     scanf("%d%d",&n,&m);
26     for(int i=0;i<n;i++)  scanf("%d%d",&v[i],&w[i]);
27     scanf("%d",&wmax);
28     vmax=-INF;
29     for(int i=0;i<n;i++)
30     {
31       cnt=1;
32       dfs(i,v[i],w[i]);
33     }
34     vmax=(vmax==-INF)?0:vmax;
35     printf("%d\n",vmax);
36   }
37   return 0;
38 }

 

posted @ 2012-05-16 23:32  BeatLJ  阅读(194)  评论(0编辑  收藏  举报