//这一题题目中给出的是选中的概率,我们要将其转化为选不中的概率,然后用(1-所有选不中概率相乘)就是选中的概率
//将0,1背包转化为了dp[i]=min(dp[i],dp[i-value[i]]*weight[i]);
#include<iostream>
#include<iomanip>
using namespace std;
double dp[10005];
int value[10005];
double weight[10005];
int n,m,i,j;
int main(){
while(cin>>n>>m){
if(n==0&&m==0)
break;
for(i=1;i<=m;i++){
cin>>value[i]>>weight[i];
weight[i]=1-weight[i];
}
for(i=0;i<10005;i++)
dp[i]=1;
for(i=1;i<=m;i++)
for(j=n;j>=0;j--){
if(j-value[i]>=0)
dp[j]=min(dp[j],dp[j-value[i]]*weight[i]);
}
cout<<setiosflags(ios::fixed);
cout<<setprecision(1)<<(1-dp[n])*100<<"%"<<endl;
}
return 0;
}
hdu 1203
最新推荐文章于 2021-01-31 23:03:39 发布