题目很水直接上代码
#include <stdio.h>
#include <iostream>
using namespace std;
#define max(a,b) a>b?a:b
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF&&(n||m))
{
int w[10100];
double g[10100];
double dp[10100];
for(int i=1;i<=m ; i++)
{
scanf("%d %lf",&w[i],&g[i]);
}
for(int i=0;i<10100;i++) dp[i]=0;
for(int i=1;i<=m;i++)
{
for(int j=n;j>=w[i];j--)
{
dp[j]=max(dp[j],dp[j-w[i]]+g[i]*(1-dp[j-w[i]]));
}
}
dp[n]=dp[n]*100;
printf("%.1f%%\n",dp[n]);
}
return 0;
}