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 }

 

你可能感兴趣的:(搜索)