HDU 2660 Accepted Necklace

此题的大意就是要制作一条项链,这个项链必须用k块石头来制作,且重量不能超过W,问所能制作项链的最大价值。

此题数据很水,DFS完全暴力就能过。

 1 #include<cstdio>

 2 #include<cstdlib>

 3 #include<cstring>

 4 #define MAX(A,B) (A>B?A:B)

 5 int n, k, W;//n块石头 制作一条项链所需要的宝石数量k 最大承受重量 W

 6 int v[35], w[35], ans;//每块石头的价值v[i] 重量w[i]

 7 

 8 void DFS(int Nstone, int whight,int value,int a)//现在已经拥有的宝石数量 现在项链的重量 现在项链的价值 判断第a块石头要或者不要

 9 {

10     if(Nstone == k && whight <= W)//满足条件 取最大值

11     {

12         ans = MAX(value, ans);

13         return ;

14     }

15     if(whight > W || a >= n || Nstone > n)//越界 退出

16         return ;

17     DFS(Nstone+1,whight+w[a],value+v[a],a+1);//要这块石头

18     

19     DFS(Nstone,whight,value,a+1);//不要这块石头

20 }

21 int main()

22 {

23     int Ncase, i;

24     scanf("%d",&Ncase);

25     while(Ncase--)

26     {

27         scanf("%d%d",&n,&k);

28         for( i = 0; i < n; i++)

29             scanf("%d%d",&v[i],&w[i]);;

30         scanf("%d",&W);

31         ans = 0;

32         DFS(0,0,0,0);

33         printf("%d\n",ans);

34     }

35     return 0;

36 }

 

你可能感兴趣的:(HDU)