【解题报告】【HDOJ2955】【01背包】Robberies

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int t;
 5     double value[105],P,gailv;
 6     int volumn[105];
 7     double record[105*100];
 8     int V,i,n,j,price;
 9     //freopen("1.txt","r",stdin);
10     scanf("%d",&t);
11     while(t--)
12     {
13         scanf("%lf%d",&P,&n);
14         V=0;
15         for(i=0;i<n;i++) 
16         {
17             scanf("%d%lf",&volumn[i],&value[i]);
18             V+=volumn[i];
19             value[i]=1-value[i];
20         }
21         
22         
23         for(i=0;i<=V;i++) record[i]=0;
24         record[0]=1;
25         
26         for(i=0;i<n;i++)
27         {
28             for(j=V;j>=volumn[i];j--)
29                 if(value[i]*record[j-volumn[i]]>record[j])
30                     record[j]=value[i]*record[j-volumn[i]];
31         }
32         /*    
33         for(i=0;i<=V;i++) printf("<%lf>\n",record[i]);
34         printf("\n");
35         
36         */    
37         
38         price=0;
39         for(i=V;i>=0;i--)
40         {
41             if(1-record[i]<=P)
42             {
43                 printf("%d\n",i);
44                 break;
45             }
46         }
47     }
48     return 0;
49 }

 

posted on 2012-07-21 18:45  coding封神  阅读(109)  评论(0编辑  收藏  举报

导航