hdu1203

#include <stdio.h>
#include <math.h>
#define  mmin(x,y) (x)<(y)?(x):(y)
int main(){
    double dp[10000+10];
    int    c[10000+10];
    double w[10000+10];
    int n,m,i,j;
    int v;
    double aim,res;
    while(~scanf("%d%d",&n,&m)){
        if(n==0&&m==0) break;
        for(i=0;i<=n;++i)    dp[i]=1.0;
        aim=1;
        for(i=1;i<=m;++i){
            scanf("%d%lf",&c[i],&w[i]);
            w[i]=1-w[i];
            aim*=w[i];
        }
        for(i=1;i<=m;++i){
            for(v=n;v>=c[i];--v){
                dp[v]=mmin(dp[v],dp[v-c[i]]*w[i]);
            }
        }
        res=1;
        for(i=n;i>=0;--i){
            if(dp[i]>=aim){
                if(dp[i]<res)
                    res=dp[i];
                }
        }
        printf("%.1lf%%
",(1-res)*100);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/symons1992/p/3440055.html