hdu 1203 01背包

转化一下问题:求一个offer也拿不到的最小概率。

每个学校有个花费和概率,很显然是01背包问题。

 1 #include <cstdio>
 2 using namespace std;
 3 
 4 const int N = 10001;
 5 const double eps = 1e-8;
 6 double f[N];
 7 int n, m;
 8 
 9 double min( double a, double b )
10 {
11     if ( a + eps < b ) return a;
12     return b;
13 }
14 
15 int main ()
16 {
17     while ( scanf("%d%d", &n, &m) != EOF )
18     {
19         if ( n == 0 && m == 0 ) break;
20         for ( int i = 0; i <= n; i++ )
21         {
22             f[i] = 1.0;
23         }
24         for ( int i = 0; i < m; i++ )
25         {
26             int cost;
27             double p;
28             scanf("%d%lf", &cost, &p);
29             p = 1 - p;
30             for ( int j = n; j >= cost; j-- )
31             {
32                 f[j] = min( f[j], f[j - cost] * p );
33             }
34         }
35         f[n] = ( 1.0 - f[n] ) * 100.0;
36         printf("%.1lf%%\n", f[n]);
37     }
38     return 0;
39 }

 

posted @ 2015-07-14 18:35  hxy_has_been_used  阅读(76)  评论(0编辑  收藏  举报