标签:des style blog color strong os
10 3 4 0.1 4 0.2 5 0.3 0 0
44.0%思路:0 1背包的一个应用。既然要求最大的概率,那么在给出的数据中,明显选2 3是最好的,所以求法是:概率p=0.2*0.3+0.8*0.3+0.2*0.7=0.44 答案出来了,但是我们可以明显的发现当组数超大的时候这个方法行不通了。我们可以逆向思考发现,至少收取一份的概率=1-1份也收不到的概率。那么就是要我们求最小收不到的概率。这样就转化为0 1背包问题。TIPS:动规难点不在于代码难理解,思想难建立,而是难在模型的建立。大部分的算法都是难在这里,所以要多多思考,建议在是在不知道怎么搞的情况下搜解题报告AC代码:#include<stdio.h> #define N 10005 int a[N]; double p[N],dp[N]; int main() { int n,m; while(scanf("%d %d",&n,&m)!=EOF) { int i,j; if(n==0&&m==0)break; for(i=0;i<m;i++) { scanf("%d %lf",&a[i],&p[i]); p[i]=1.0-p[i]; } for(i=0;i<=n;i++) dp[i]=1.0; for(i=0;i<m;i++) for(j=n;j>=a[i];j--) if(dp[j]>dp[j-a[i]]*p[i]) dp[j]=dp[j-a[i]]*p[i]; printf("%.1lf%%\n",(1-dp[n])*100); } return 0; }
HDU 1203 I NEED A OFFER!,布布扣,bubuko.com
标签:des style blog color strong os
原文地址:http://blog.csdn.net/u012313382/article/details/37955101