http://acm.hdu.edu.cn/showproblem.php?pid=1203
01背包
代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
using namespace std;
double f[10005];
struct node
{
int a;
double b;
}num[10005];
int main()
{
int n,m;
while(scanf("%d%d",&n,&m),n|m)
{
for(int i=1;i<=m;i++)
scanf("%d%lf",&num[i].a,&num[i].b);
memset(f,0,sizeof(f));
for(int i=1;i<=m;i++)
{
for(int j=n;j>=num[i].a;j--)
{
f[j]=max(f[j],(1-(1-f[j-num[i].a])*(1-num[i].b)));
}
}
printf("%.1f%%\n",f[n]*100);
}
}