HDU--1203 I NEED A OFFER!(01背包)
2013-12-16 00:46 gongti 阅读(158) 评论(0) 收藏 举报
题目http://acm.hdu.edu.cn/showproblem.php?pid=1203
分析:这题和抢劫银行是一样的。至少获得一个学校的概率等于1 减去一个offer都不获得。
所以转变为一个都不获得的最小值。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,v[10010];
float p[10010],dp[10010];
float ZeroOnePack()
{
for(int i=0;i<=m;i++)
dp[i]=1;
for(int i=1;i<=n;i++)
for(int j=m;j>=v[i];j--)
dp[j]=min(dp[j],dp[j-v[i]]*(1-p[i]));
return (1-dp[m]);
}
int main()
{
while (scanf("%d%d",&m,&n)!=EOF)
{
if(n==0&&m==0) break;
for(int i=1;i<=n;i++)
scanf("%d%f",&v[i],&p[i]);
printf("%.1f%%\n",ZeroOnePack()*100);
}
return 0;
}
浙公网安备 33010602011771号