HDU 1203 背包问题

题目大意:

根据学校的申请费用,根据已有的钱得到最大的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 }

 

你可能感兴趣的:(HDU)