还是01背包
#include<bits/stdc++.h>
using namespace std;
int a[10020];
double b[10020],dp[10020];
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==2&&(n||m))
{
for(int i=0;i<=n;i++)
dp[i]=1.0;
for(int i=1;i<=m;i++)
{
scanf("%d%lf",&a[i],&b[i]);
b[i]=1.0-b[i];
}
for(int i=1;i<=m;i++)
for(int j=n;j>=a[i];j--)
{
if(dp[j-a[i]]*b[i]<dp[j])
dp[j]=dp[j-a[i]]*b[i];
}
printf("%.1lf%%\n",(1.0-dp[n])*100.0);
}
return 0;
}