题意:n个银行,每个有价值和被抓概率,要求找被抓概率不超过p的最大价值

题解:dp[i][j]表示前i个取j价值的所需最小概率,01背包处理,转移方程dp[i][j]=min(dp[i-1][j],dp[i-1][j-v[i]]+(1-dp[i-1][j-v[i]])*p)

#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pii pair<int,int> using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f3f; double dp[N][maxn],gl[N];
int value[N];
int main()
{
int res=,t;
scanf("%d",&t);
while(t--)
{
double p;
int n;
scanf("%lf%d",&p,&n);
int sum=;
for(int i=;i<=n;i++)
{
scanf("%d%lf",&value[i],&gl[i]);
sum+=value[i];
}
for(int i=;i<=n;i++)
for(int j=;j<=sum;j++)
dp[i][j]=;
dp[][]=;
for(int i=;i<=n;i++)
{
for(int j=;j<=sum;j++)
{
if(j>=value[i])dp[i][j]=min(dp[i-][j],dp[i-][j-value[i]]+(-dp[i-][j-value[i]])*gl[i]);
else dp[i][j]=dp[i-][j];
}
}
for(int i=sum;i>=;i--)
{
if(dp[n][i]<p)
{
printf("Case %d: %d\n",++res,i);
break;
}
}
}
return ;
}
/********************
dp[i]抢到i元被抓概率不超过p
********************/

最新文章

  1. redis incr incrby decr decrby命令
  2. GridView绑定Visible
  3. openstack cloudinit 遇坑记
  4. 玩转Docker之Docker简介(一)
  5. 隐写-CTF中图片隐藏文件分离方法总结
  6. Yii源码阅读笔记(二十六)
  7. MyBatis-Generator 最佳实践
  8. POJ 1966 Cable TV Network(顶点连通度的求解)
  9. Javascript数据类型之Undefined和null
  10. SensorThread线程
  11. css:中文词不断开,整体换行
  12. 谈谈PHP、Python与Ruby
  13. Maven-1:下载&amp;安装
  14. VR的技术问题是不是市场的绊脚石?
  15. CentOs 系统启动流程相关
  16. Ubuntu17.10下启动Rancher
  17. EventBus VS Spring Event
  18. linux-shell-命令总结
  19. golang 创建一个简单的资源池,重用资源,减少GC负担
  20. 2018.11.18 spoj Triple Sums(容斥原理+fft)

热门文章

  1. VMware Workstation 虚拟机纯 Linux 终端如何安装 VMware Tools ?
  2. Happy Hours, Happy Days
  3. 【WEB HTTP】集成点:网关、隧道及中继
  4. Python之匿名函数(Day18)
  5. (from) Javascript 生成指定范围数值随机数
  6. asp.net 利用Response.Filter 获取输出内容, 变更输出内容
  7. PAT 天梯赛 L1-046. 整除光棍 【模拟除法】
  8. web测试点梳理
  9. $《第一行代码:Android》读书笔记——第13章 Android高级技巧
  10. iOS获取设备IP地址