hdu1203 I NEED A OFFER!

来源:互联网 发布:大数据用到的java 编辑:程序博客网 时间:2024/06/05 21:16

刚看到题,思路不是很清晰,不过考虑了一会就想到了0-1背包问题了。

拿到的OFFER 1 - m 份。

在资金允许的范围内求至少拿到一份OFFER的概率,也就是求拿不到OFFER的概率f[j].

f[j] = min ( f[ j - a[i] ] * ( 1 - b[i] ], f[j] ).

ans = 1 - f[j];

 

#include <stdio.h>const int MAXN = 10005;struct Good {    int cost;    double p;}good[MAXN];double min ( double a, double b ) {    return a < b ? a : b;}int main ( ) {    int m, n;    double f[MAXN];    while ( scanf ( "%d%d", &n, &m ) != EOF ) {        if ( n == 0 && m == 0 )            break;        for ( int i = 0; i < m; ++i )            scanf ( "%d %lf", &good[i].cost, &good[i].p );        for ( int i = 0; i <= n; ++i )            f[i] = 1;        double res = 1;        for ( int i = 0; i < m; ++i )            for ( int j = n; j >= good[i].cost; --j ) {                f[j] = min ( f[j - good[i].cost] * ( 1 - good[i].p ), f[j] );                res = min ( res, f[j] );            }        printf ( "%.1lf%%\n", ( 1 - res ) * 100 );    }}


 





原创粉丝点击