1. 程式人生 > >01背包

01背包

i++ closed style logs col one tar gif b-

Robberies

HDU - 2955

題意:小偷搶銀行,問在被捕的概率不超過p的情況下最多搶多少錢。

技術分享
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=10010;
 4 double f[maxn];  //不被捕的概率
 5 int v;
 6 double p;
 7 double x[maxn];
 8 int m[maxn];
 9 int main(){
10     int t;
11     scanf("%d",&t);
12     while(t--){
13         int
n; 14 int ans=0; 15 memset(f,0,sizeof(f)); 16 f[0]=1; 17 scanf("%lf%d",&p,&n); 18 int sum=0; 19 for(int i=0;i<n;i++){ 20 scanf("%d%lf",&m[i],&x[i]); 21 sum+=m[i]; 22 } 23 for(int i=0;i<n;i++) 24 for
(int j=sum;j>=m[i];j--){ 25 f[j]=max(f[j],f[j-m[i]]*(1-x[i])); 26 } 27 for(int i=sum;i>0;i--){ 28 if((1-f[i])<=p){ 29 ans=i; 30 break; 31 } 32 } 33 printf("%d\n",ans); 34 } 35 }
View Code

01背包