Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 40569 Accepted Submission(s): 16121
题解:01背包。至少一份offer的最大概率 = ( 1 - 一份都没有的最小概率)。
代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=10005;
double w[maxn],dp[maxn];
int v[maxn];
int main()
{
int i,j,n,m;
while(scanf("%d%d",&n,&m))
{
if(!m&&!n) break;
fill(dp,dp+maxn,1);
for(i=1;i<=m;i++) scanf("%d%lf",&v[i],&w[i]);
for(i=1;i<=m;i++)
{
for(j=n;j>=v[i];j--)
dp[j]=min(dp[j],dp[j-v[i]]*(1-w[i]));
}
printf("%.1lf%%\n",(1-dp[n])*100.0);
}
return 0;
}
原文:https://www.cnblogs.com/VividBinGo/p/11354188.html