简单0-1背包和概率有关的背包和HDU2955类似
注意dp[0]的初始化
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
int w[10000+10];
double v[10000+10];
double dp[10000+10];
int main(){
int m,n;
while(cin>>m>>n&&(m||n)){
for(int i=0;i<n;i++)cin>>w[i]>>v[i];
for(int j=0;j<=10000;j++){
dp[j]=1;
}dp[0]=1;
for(int i=0;i<n;i++){
for(int j=m;j>=w[i];--j){
dp[j]=min(dp[j],dp[j-w[i]]*(1-v[i]));
}
}
double ans=0;
for(int i=0;i<=m;i++){
ans=max(ans,1-dp[i]);
}
printf("%.1lf%%\n",ans*100);
}
}