题目描述:
思路:
这道题与2955思想相同,只不过更直观:求不被录取的最小概率。
代码:
#include<stdio.h>
#include<string.h>
#define MAXN 10005
float MIN(float a,float b)
{
return a<b?a:b;
}
int main()
{
int i,j,max,n,m;
int a[MAXN];
float b[MAXN],dp[MAXN],p;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(m==0&&n==0) break;
for(i=1;i<=n;i++) dp[i]=1;
for(i=1;i<=m;i++)
{
scanf("%d %f",&a[i],&b[i]);//cnt+=a[i];
b[i]=1-b[i];//求不被录取的概率
}
dp[0]=1; //没钱不被录取的概率是1
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;
}