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;
}
}