标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 16775 Accepted Submission(s):
6187
#include<stdio.h> #include<string.h> const int N=101; float p[N],dp[N*100],pn; int v[N],sum; int main() { int T,n,res; scanf("%d",&T); while(T--) { scanf("%f%d",&pn,&n);sum=0; pn=1-pn;//由于pn是可以承担的最大风险值 则1-pn为最低要达到的逃跑成功率 memset(dp,0,sizeof(dp)); for(int i=0;i<n;++i) scanf("%d%f",&v[i],&p[i]),sum+=v[i],p[i]=1-p[i]; dp[0]=1;//不抢劫的时候逃跑成功率为1 for(int i=0;i<n;++i) for(int j=sum;j>=v[i];--j) if(dp[j-v[i]]*p[i]>dp[j])//成功率是乘法计算的 dp[j]=dp[j-v[i]]*p[i]; res=0; for(int i=sum;i>=0;--i) if(dp[i]>=pn)//只要成功率大于pn i即为要求的答案 { res=i; break; } printf("%d\n",res); } }
标签:
原文地址:http://www.cnblogs.com/-locker-/p/4809986.html