hdu1203 I NEED A OFFER!

http://acm.hdu.edu.cn/showproblem.php?pid=1203

 一道简单的背包问题。

但是,查了一晚上错。。没有考虑到内循环j=0的情况

#include<iostream>
#include<cstdio>
#include<cstring>
#include <iomanip>
using namespace std;
double s[10010];
int a[10010];
double b[10010];
int main()
{
     int n,m;
     while(cin>>n>>m)
     {
        if(n==0&&m==0) break;
        for(int i=0;i<m;i++)
        {   
            cin>>a[i]>>b[i];
            b[i]=1.0-b[i];
        }
        for(int i=0;i<=n;i++) s[i]=1.0;
        s[0]=1.0;
        for(int i=0;i<m;i++)
        {
            for(int j=n;j>=0;j--)
            {
                if(!(j>=a[i])) break;
                if(s[j]>s[j-a[i]]*b[i]) s[j]=s[j-a[i]]*b[i];
            }
        }
        cout<<setiosflags(ios::fixed)<<setprecision(1)<<1.0*(1.0-s[n])*100<<'%'<<endl;
    }
}

猜你喜欢

转载自blog.csdn.net/vinacky/article/details/82991919