标签:des style http color java os io strong
原题http://acm.hdu.edu.cn/showproblem.php?pid=2955
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11820 Accepted Submission(s): 4398
3 0.04 3 1 0.02 2 0.03 3 0.05 0.06 3 2 0.03 2 0.03 3 0.05 0.10 3 1 0.03 2 0.02 3 0.05
2 4 6
//题目大意,给你一个概率,然后n组数据,每组数据的整数代表钱,小数代表被抓的概率 //问,在不被抓的概率的前提下,最多能拿多少钱。 //思路,开个dp数组,代表钱在n的时候被抓的不被抓的概率, #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <limits.h> #include <ctype.h> #include <string.h> #include <string> #include <math.h> #include <algorithm> #include <iostream> #include <stack> #include <queue> #include <deque> #include <vector> #include <set> #include <map> using namespace std; #define N 100 + 10 double dp[10009]; int sum[N]; double p[N]; double max(double a,double b) { return a>b?a:b; } int main() { int T,n,i; double v; while(~scanf("%d",&T)) { while(T--) { memset(dp,0,sizeof(dp)); dp[0] = 1; memset(sum,0,sizeof(sum)); memset(p,0,sizeof(p)); scanf("%lf%d",&v,&n); int mark = 0; for(i=1; i<=n; i++) { scanf("%d%lf",&sum[i],&p[i]); mark+=sum[i]; p[i] = 1-p[i]; } int j; for(i=0;i<=mark;i++){ dp[i] = 0; } dp[0] =1;//当抢了0元时,肯定是安全的。所以初始化为1 for(i=1; i<=n; i++) { for(j=mark; j>=sum[i]; j--) { dp[j] = max(dp[j],dp[j-sum[i]]*(p[i])); } } v = 1-v; for(i=mark; i>=0; i--) { if(dp[i] >= v){ printf("%d\n",i); break; } } } } return 0; }
标签:des style http color java os io strong
原文地址:http://blog.csdn.net/zcr_7/article/details/38488681