LightOJ - 1079 概率dp
2024-09-01 02:11:10
题意: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
********************/
最新文章
- redis incr incrby decr decrby命令
- GridView绑定Visible
- openstack cloudinit 遇坑记
- 玩转Docker之Docker简介(一)
- 隐写-CTF中图片隐藏文件分离方法总结
- Yii源码阅读笔记(二十六)
- MyBatis-Generator 最佳实践
- POJ 1966 Cable TV Network(顶点连通度的求解)
- Javascript数据类型之Undefined和null
- SensorThread线程
- css:中文词不断开,整体换行
- 谈谈PHP、Python与Ruby
- Maven-1:下载&;安装
- VR的技术问题是不是市场的绊脚石?
- CentOs 系统启动流程相关
- Ubuntu17.10下启动Rancher
- EventBus VS Spring Event
- linux-shell-命令总结
- golang 创建一个简单的资源池,重用资源,减少GC负担
- 2018.11.18 spoj Triple Sums(容斥原理+fft)
热门文章
- VMware Workstation 虚拟机纯 Linux 终端如何安装 VMware Tools ?
- Happy Hours, Happy Days
- 【WEB HTTP】集成点:网关、隧道及中继
- Python之匿名函数(Day18)
- (from) Javascript 生成指定范围数值随机数
- asp.net 利用Response.Filter 获取输出内容, 变更输出内容
- PAT 天梯赛 L1-046. 整除光棍 【模拟除法】
- web测试点梳理
- $《第一行代码:Android》读书笔记——第13章 Android高级技巧
- iOS获取设备IP地址