HDOJ 2955 Robberies 简单01背包+简单概率思想
2013-09-13 23:32
429 查看
/** * 与其说这题考背包,不如说考概率。 * 比较容易想到的是,把被抓到的概率乘100,加卡精度来做背包容量,钱就做背包价值 * 可是不行! 这精度卡不了诶。。还是wa * 换种想法,题目给出的被抓的概率p,那(1-p)就是不被抓的概率。 * 然而,让dp[i]表示抢到i百万的逃跑成功率。 那么如何计算? * 如果要抢到i百万需要抢n个银行,那么就是抢这n个银行的逃跑成功率的乘积。 为什么? * 概率知识吧,因为n个银行都必须成功且又是独立的事件,所以根据乘法原理就那样了。。 贴人代码吧 */ #include<stdio.h> #include<string.h> double dp[10000]; int mm[1000]; double pp[1000]; double max(double a, double b) { return a>b? a:b; } int main() { int cas,n,i,j,sum; double p; scanf("%d",&cas); while(cas--) { scanf("%lf %d",&p,&n); for(i=0,sum=0; i<n; i++) { scanf("%d %lf",&mm[i],&pp[i]); sum += mm[i]; } memset(dp,0,sizeof(dp)); dp[0] = 1; for(i=0; i<n; i++) for(j=sum; j>=mm[i]; j--) dp[j] = max(dp[j],dp[j-mm[i]] * (1-pp[i])); for(i=sum; i>=0; i--) { if(dp[i]>=(1-p)) { printf("%d\n",i); break; } } } return 0; }
相关文章推荐
- HDOJ.2955 Robberies (01背包+概率问题)
- hdoj 2955 Robberies 【01背包】
- hdoj 2955 Robberies 【dp&&01背包】
- HDOJ 2955 Robberies (01背包)
- hdoj2955 Robberies(01背包)
- HDU 2955|Robberies|01背包|概率
- hdoj-2955 Robberies(01背包)
- HDU 2955 Robberies (转化概率-01背包)
- HDOJ2955 Robberies(01背包,概率)
- HDU 2955-Robberies(01背包+概率)
- HDOJ-2955 Robberies[01背包问题-DP]
- HDOJ 2955 Robberies (01背包)
- HDOJ 2955 Robberies (01背包)
- HDU 2955 Robberies(01背包+概率)
- hdoj problem 2955 Robberies(01背包问题)
- HDU 2955 Robberies (01背包)
- HDU_2955_Robberies(变种的01背包)
- hdoj 2955 Robberies
- hdoj--2955--Robberies(背包好题)
- hdoj-【2955 Robberies】