hdu i need offer

来源:互联网 发布:写文章的软件 编辑:程序博客网 时间:2024/05/23 13:46

这一题主要运用了大学数学中的概率。如果不会,可以看看这篇博客

那么知道是概率之后就是dp动态规划了.
题目要求的是至少收到一份Offer的最大概率,我们得到得不到的最小概率即可,状态转移方程:dp[j]=min(dp[j],dp[j-val[i]]*p[i]);其中,p[i]表示得不到的概率,(1-dp[j])为花费j元得到Offer的最大概率 .

#include <iostream>#include <stdio.h>#include <string.h>#include <stdlib.h>using namespace std;int V,m;int w[10001];double v[10001];double dp[100001];int main(){    while(scanf("%d%d",&V,&m)!=EOF)    {        if(V==0&&m==0) break;        for(int i=1; i<=m; i++)        {            scanf("%d%lf",&w[i],&v[i]);            v[i]=1-v[i];        }        for(int i=0; i<=V; i++)            dp[i]=1;        for(int i=1; i<=m; i++)        {            for(int j=V; j>=w[i]; j--)            {                if(dp[j-w[i]]*v[i]<dp[j])                {                    dp[j]=dp[j-w[i]]*v[i];                }            }        }        dp[V]=(1-dp[V])*100;        printf("%.1lf%%\n",dp[V]);    }    return 0;}

怕超时,所以用了c

原创粉丝点击