hdu2955 Robberies

0-1背包问题,总容量设为从所有银行获益的总和,价值为不被抓捕的概率。

 

http://acm.hdu.edu.cn/showproblem.php?pid=2955

 

 

 1 #include <cstring>
 2 #include <cstdio>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 
 7 const int maxn = 1e4 + 10;
 8 const int maxm = 1e2 + 10;
 9 
10 int v[maxm], n;
11 double dp[maxn], p[maxm], P;
12 
13 int main(){
14     int T;
15     scanf("%d", &T);
16     while(T--){
17         scanf("%lf%d", &P, &n);
18         int sum = 0;
19         for(int i = 0; i < n; i++) scanf("%d%lf", &v[i], &p[i]), sum += v[i];
20         memset(dp, 0, sizeof dp);
21         dp[0] = 1;
22         for(int j = 0; j < n; j++){
23             for(int i = sum; i >= v[j]; i--){
24                 dp[i] = max(dp[i], dp[i - v[j]] * (1 - p[j]));
25             }
26         }
27         for(int i = sum; i >= 0; i--) if(dp[i] >= 1 - P){
28             printf("%d\n", i);
29             break;
30         }
31     }
32     return 0;
33 }
View Code

 

posted @ 2015-08-23 11:49  astoninfer  阅读(117)  评论(0编辑  收藏  举报