hdu 1203 转换的01包问题。。。。

俗话说的话 正难则反。,。  这个基本的思想都用不好的话 回家种田去吧。

#include<cstdio>
#include<string.h>
#include<iostream>
using namespace std;
double minn(double x,double y)
{
    if(y<x) return y;
    else return x;
}
int main()
{
    int n,m;
    int w[10010];
    double p[10010];
    double dp[10001];
    while(cin>>n>>m)
    {
        if(n==0&&m==0) break;
        for(int i=1;i<=m;i++)
        {
            double x;
            cin>>w[i]>>x;
            p[i]=1-x;
 //           cout<<p[i]<<endl;
        }
        dp[0]=1.000;
        for(int i=1;i<=n;i++) dp[i]=1.00;
        for(int i=1;i<=m;i++)
        {
            for(int j=n;j>=w[i];j--)
            {
              //  cout<<dp[j]<<' ';    
                dp[j]=minn(dp[j],dp[j-w[i]]*p[i]);
        //        cout<<' '<<dp[j-w[i]]*p[i]<<' '<<dp[j]<<' ';
            }
        //    cout<<endl;
        }
        double ans=(1-dp[n])*100;
        printf("%.1f%%\n",ans);
    }
    return 0;
} 

 

posted @ 2016-08-11 15:05  猪突猛进!!!  阅读(108)  评论(0编辑  收藏  举报