HDU 1203 I NEED A OFFER! 0-1背包

来源:互联网 发布:vc高级编程 编辑:程序博客网 时间:2024/05/16 23:29

用dp[j]记录用j块钱最小不录取的概率。

初始化dp[]都为1.0,因为没有选录取的概率为0,不录取的概率为1;

View Code
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int w[10001];double p[10001],q[10001],dp[10001];int main(){    int m, n, i, j;    while(~scanf("%d%d",&m,&n)&&(n||m))    {        for(i=1;i<=n;i++)        {            scanf("%d%lf",&w[i],&p[i]);            q[i]=1.0-p[i];        }        for(i=0;i<=m;i++)        dp[i]=1.00;        for(i=1;i<=n;i++)        {            for(j=m;j>=w[i];j--)            {                dp[j]=min(dp[j],dp[j-w[i]]*q[i]);            }        }        printf("%.1f%%\n",(1.0-dp[m])*100.0);    }    return 0;}