首页 > 代码库 > HDU 1203 背包问题

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 1203 背包问题