10 3 4 0.1 4 0.2 5 0.3 0 0
44.0%HintYou should use printf("%%") to print a ‘%‘.
01背包。这里有个小技巧,就是转化为求收不到一份offer的最小概率。
AC代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
double min(double a,double b)
{
return a<b?a:b;
}
int main ()
{
int n,m,a[10005];
int i,j;
double b[10005],c[10005],dp[10005];
while(~scanf("%d%d",&n,&m)&&(n||m))
{
for(i=1;i<=m;i++)
{
scanf("%d%lf",&a[i],&b[i]);
c[i]=1.0-b[i];
}
for(i=0;i<=n;i++)
dp[i]=1.0;
for(i=1;i<=m;i++)
for(j=n;j>=a[i];j--)
dp[j]=min(dp[j-a[i]]*c[i],dp[j]);
printf("%.1lf%%\n",(1.0-dp[n])*100);
}
return 0;
}
杭电 1203 I NEED A OFFER!,布布扣,bubuko.com
原文地址:http://blog.csdn.net/hanhai768/article/details/30741923