题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1203
题目大意:
中文题。
思路:
有上一题做铺垫,这题就简单多了。计算花费为j时最小的被拒绝的概率P,最后答案就是1-P,表示最大的被接受的概率。
代码:
#include<stdio.h>
#include<string.h>
double min(double a,double b)
{
if(a<b)return a;
else return b;
}
int main()
{
int n,m,i,j,k,a[10005];
double b[10005],dp[10005],maxi;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)break;
maxi=0;
for(i=0;i<10005;i++)
dp[i]=1;
for(i=1;i<=m;i++)
{
scanf("%d%lf",&a[i],&b[i]);
b[i]=1-b[i];
}
dp[0]=1.0;
for(i=1;i<=m;i++)
for(j=n;j>=a[i];j--)
{
dp[j]=min(dp[j],dp[j-a[i]]*b[i]);
}
printf("%.1f%%\n",(1-dp[n])*100);
}
return 0;
}