HDU 1203 I NEED A OFFER! 0-1背包
用dp[j]记录用j块钱最小不录取的概率。
初始化dp[]都为1.0,因为没有选录取的概率为0,不录取的概率为1;
View Code
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int w[10001]; double p[10001],q[10001],dp[10001]; int main() { int m, n, i, j; while(~scanf("%d%d",&m,&n)&&(n||m)) { for(i=1;i<=n;i++) { scanf("%d%lf",&w[i],&p[i]); q[i]=1.0-p[i]; } for(i=0;i<=m;i++) dp[i]=1.00; for(i=1;i<=n;i++) { for(j=m;j>=w[i];j--) { dp[j]=min(dp[j],dp[j-w[i]]*q[i]); } } printf("%.1f%%\n",(1.0-dp[m])*100.0); } return 0; }


浙公网安备 33010602011771号