标签:
转化一下问题:求一个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 }
标签:
原文地址:http://www.cnblogs.com/huoxiayu/p/4646301.html