【解题报告】【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 }