杭电1203-- I NEED A OFFER!

题目描述:
这里写图片描述

思路:
这道题与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;
}

猜你喜欢

转载自blog.csdn.net/cprimesplus/article/details/81638014