标签:des style blog http color os io strong for
http://acm.hdu.edu.cn/showproblem.php?pid=1203
解题思路:
由题意可知,我们需要找到最小的Pk1*Pk2*Pki。
联系到01背包问题,我们把钱数看做费用,概率看做价值。
则状态转移方程应该是dp[i]=min(dp[i],dp[i-c]*w) ,初始设所有的dp[i] = 1。
#include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> using namespace std; int V,m; int w[10001]; double v[10001]; double dp[100001]; int main() { while(scanf("%d%d",&V,&m)!=EOF) { if(V==0&&m==0) break; for(int i=1; i<=m; i++) { scanf("%d%lf",&w[i],&v[i]); v[i]=1-v[i]; } for(int i=0; i<=V; i++) dp[i]=1; for(int i=1; i<=m; i++) { for(int j=V; j>=w[i]; j--) { if(dp[j-w[i]]*v[i]<dp[j]) { dp[j]=dp[j-w[i]]*v[i]; } } } dp[V]=(1-dp[V])*100; printf("%.1lf%%\n",dp[V]); } return 0; }
标签:des style blog http color os io strong for
原文地址:http://www.cnblogs.com/zhangmingcheng/p/3940250.html