HDU-1203-I NEED A OFFER!

来源:互联网 发布:软件界面设计要求 编辑:程序博客网 时间:2024/05/22 20:10

这个题是个背包问题,要求求出至少被一个学校录取的最大概率

思路:将概率全部转换成不能录取,然后最后结果用1-p(不能录取即可)

代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=10001;int n,m,cost[maxn];double p[maxn],dp[maxn];int main(){    while(scanf("%d%d",&n,&m)&&(n+m))    {for(int i=0;i<m;i++){    scanf("%d%lf",&cost[i],&p[i]);    p[i]=1-p[i];}for(int i=0;i<=n;i++)    dp[i]=1;double ans=0;for(int i=0;i<m;i++)    for(int j=n;j>=cost[i];j--)    {if(dp[j]==1.0)    dp[j]=dp[j-cost[i]]*p[i];else    dp[j]=min(dp[j],dp[j-cost[i]]*p[i]);ans=max(ans,dp[j]);    }printf("%.1lf%%\n",(1-dp[n])*100);    }    return 0;}


原创粉丝点击