题目大意:

根据学校的申请费用,根据已有的钱得到最大的offer率

这里很明显就是一个价值为概率的背包问题

计算两个offer合并的概率 为a + b - a*b

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 using namespace std;
 5 const int N = 10005;
 6 
 7 double dp[N];
 8 
 9 int main()
10 {
11     int n , m , a;
12     double b;
13     while(scanf("%d%d" , &m , &n)){
14         if(n == 0 && m == 0) break;
15         memset(dp , 0 , sizeof(dp));
16         for(int i = 0 ; i<n ; i++){
17             scanf("%d%lf" , &a , &b);
18             for(int j = m ; j>=a ; j--){
19                 double tmp = dp[j-a] + b - dp[j-a]*b;
20                 dp[j] = max(dp[j] , tmp);
21             }
22         }
23         printf("%.1f%%\n" , dp[m] * 100);
24     }
25     return 0;
26 }

 

 posted on 2014-12-25 01:34  Love风吟  阅读(122)  评论(0编辑  收藏  举报