hdu 2955

01背包稍加修改

 1 #include<stdio.h>
 2 #include<string.h>
 3 double max(double x,double y)
 4 {return x>y?x:y;}
 5 
 6 double dp[10005];
 7 double per[105];
 8 int mil[105];
 9 int main()
10 {
11     int t;
12     scanf("%d",&t);
13     while(t--)
14     {
15         memset(dp,0,sizeof(dp));
16         dp[0]=1;
17         int n;
18         double p;
19         scanf("%lf%d",&p,&n);
20         p=1-p;
21         int sum=0;
22         for(int i=0;i<n;i++)
23         {
24             scanf("%d%lf",&mil[i],&per[i]);
25             per[i]=1-per[i];
26             sum+=mil[i];
27         }
28         
29         for(int i=0;i<n;i++)
30         {
31             for(int j=sum;j-mil[i]>=0;j--)
32             {
33                 if(dp[j]<dp[j-mil[i]]*per[i])
34                     dp[j]=dp[j-mil[i]]*per[i];
35             }
36         }
37         for(int j=sum;j>=0;j--)
38         {
39             if(dp[j]>p)
40             {
41                 printf("%d\n",j);
42                 break;
43             }
44         }
45     }
46     return 0;
47 }

 

posted @ 2013-03-19 14:57  zerojetlag  阅读(162)  评论(0编辑  收藏  举报