标签: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