01背包
至少得到一份offer的概率=1 — 一份都没得到的概率。先求一份没得到的概率的最小值。dp初值为1。
#include <cstdio>
int main()
{
int n,m,i,j,c[10008];
double per[10008],dp[10008];
while(1)
{
scanf("%d%d",&n,&m);
if(n==0&&m==0)break;
for(i=0;i<m;i++)
scanf("%d%lf",c+i,per+i);
for(i=0;i<=n;i++)
dp[i]=1;
for(i=0;i<m;i++)
for(j=n;j>=c[i];j--)
if(dp[j]>dp[j-c[i]]*(1-per[i]))
dp[j]=dp[j-c[i]]*(1-per[i]);
printf("%.1lf%%\n",(1-dp[n])*100);
}
return 0;
}