ABC 402 E - Payment Required
ABC 402 E - Payment Required
有向图随机游走
我还是得好好学学期望。
题意
有 \(n\) 个问题,每个问题分数是 \(s_i\),提交一次的花费是 \(c_i\),提交一次通过的概率是 \(p_i\)。
每个问题可以多次提交,多次通过算一次得分。
你可以根据之前的提交情况决定之后的操作。
你有 \(x\) 块钱,问最大期望得分是多少。
\(n \le 8, s \le 2718, c,s \le 5000\)。
思路
考虑期望 DP。
先刻画状态,本质不同的状态只需要考虑,目前还剩下多少钱,已经通过了哪些题目(或者还有哪些题目没有通过)。因为 \(n \le 8\),所以状态数是 \(O(2^n x)\) 是可以接受的。
\(f_{res,i}\) 表示还剩 \(res\) 元,已经通过了集合 \(i\) 的题目。
将每个状态的有向图随机游走建立出来,然后就可以推状态转移方程。每个状态由它可以到达的状态转移过来。
在状态 \((res,i)\) 时,下一步可以提交任意还没有通过的题目,假设提交题目 \(j\)。
- 有 \(p_j\) 的概率成功,得到 \(s_j\) 分,后继状态是 \((res-c_j,i \cup j)\)。
- 有 \(1-p_i\) 的概率失败,不得分,后继状态是 \((res-c_j,i)\)。
所以
\]
转移复杂度 \(O(n)\)。
答案就是初始时有 \(x\) 元,已经解决了 \(\emptyset\) 题。
时间复杂度 \(O(2^n n x)\)。
code
#include<bits/stdc++.h>
#define sf scanf
#define pf printf
#define rep(x,y,z) for(int x=y;x<=z;x++)
#define per(x,y,z) for(int x=y;x>=z;x--)
using namespace std;
typedef long long ll;
namespace wing_heart {
constexpr int N=8,X=5e3+7;
int n,x;
int s[N+1],c[N+1],p[N+1];
double f[X][1<<N];
void main() {
sf("%d%d",&n,&x);
rep(i,1,n) {
sf("%d%d%d",&s[i],&c[i],&p[i]);
}
rep(res,1,x) { // 目前还剩下的钱
rep(i,0,(1<<n)-1) { // 目前已解决的问题
rep(j,1,n) {
int to=i|(1<<(j-1));
if(i==to || res<c[j]) continue;
double P=1.0*p[j]/100;
f[res][i] = max(f[res][i], P*(f[res-c[j]][to]+s[j]) + (1-P)*f[res-c[j]][i]);
}
}
}
pf("%.9lf",f[x][0]);
}
}
int main() {
#ifdef LOCAL
freopen("in.txt","r",stdin);
freopen("my.out","w",stdout);
#endif
wing_heart :: main();
}
ABC 402 E - Payment Required的更多相关文章
- Ajax_01之概述、响应
1.URL.URI和URN URL:Unified Resource Locator:统一资源定位符: URI:Unified Resource Identifier:统一资源识别符: URN:Uni ...
- What's New in C# 6.0
Static Types as using So, we are all quite familiar with this notion of accessing static class membe ...
- 谷歌(Chrome)安装Advanced REST Client插件
进入Extensions(工具——>扩展程序) 点击Get More extensions或新建标签页点击网上应用店 如果加载太慢,出现chrome网上应用店无法打开,显示暂时无法加载该应用的画 ...
- What's New in C# 6.0(转)
原文地址:http://www.codeproject.com/Tips/1023426/Whats-New-in-Csharp 本来想翻译一下贴出来,但是好像很多语言组织起来比较困难,读书少不会表达 ...
- PHP返回404状态码,由服务器处理
1. 通过header()方法来实现, 最简单的方法,而且对php的版本没什么限制 <?php header('HTTP/1.1 404 Not Found'); ...
- 简述HTTP报文请求方法和状态响应码
1. Method 请求方法,表明客户端希望服务器对资源执行的动作: 1.1 GET 向服务器请求资源. 1.2 HEAD 和GET方法的行为类似,但服务器在响应中只返回首部,不会返回实体的主体部分. ...
- HTML的状态码
HTML状态码的相关知识 ㈠:含义 HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码. 也就是当浏览者访问一个网页时,浏览者的浏览器会向 ...
- Http 状态码总结
HTTP 状态码列表 一. 1 开头 (继续执行) 服务器收到请求,需要请求者继续执行操作 100:(continue) 客户端继续请求 101:(Switching Protocols) 切换协议, ...
- RFC-2068-http
本文档规定了互联网社区的标准组协议,并需要讨论和建议以便更加完善.请参考 “互联网官方协议标准”(STD 1)来了解本协议的标准化状态.本协议不限流传发布. 版权声明 Copyright (C) Th ...
- RFC 2616
Network Working Group R. Fielding Request for Comments: 2616 UC Irvine Obsoletes: 2068 J. Gettys Cat ...
随机推荐
- 旋转变换,对某个点进行绕x,y,z的变换。
简介 旋转变换,对某个点进行绕x,y,z的变换. 代码 #include <iostream> #include <vector> #include <algorithm ...
- 程序员可弟哥的贴心伙伴:Codigger 之软件项目体检
在代码的浩瀚世界里,程序员可弟哥每日都在努力追寻着卓越与完美.作为一家知名软件公司的资深开发者,他经常需要面对紧迫的项目截止日期和复杂的业务需求.然而,在实际的项目开发过程中,他却时常面临诸多棘手的挑 ...
- iPaaS生成数据库接口只要60秒?
"iPaaS生成数据库接口只要60秒?" 关于"iPaaS生成数据库接口只要60秒?"的说法,这实际上反映了iPaaS解决方案的一个重要优势:高效率.确实,借助 ...
- SciTech-EECS-Circuits:电路-Transformer(变压器): 高频变压器 线圈匝数
高频变压器 线圈匝数 与 电压 的关系, 主要是 电磁感应定律, 即变压器 的 电压比 与 其 绕组的匝数比 成正比. 就是: $ \large \text{高频变压器}\ 的\ \text{匝数 ...
- SciTech-BigDataAIML-Tensorflow-Introduction to Tensors
https://tensorflow.google.cn/guide/tensor TensorFlow supports eager execution and graph execution, a ...
- Rust常用并发示例代码
记录几个常用的并发用法: 1.如何让线程只创建1次 先看一段熟悉的java代码: void method1() { new Thread(() -> { while (true) { Syste ...
- 2023年11月最新全国省市区县和乡镇街道行政区划矢量边界坐标经纬度地图数据 shp geojson json
发现个可以免费下载全国 geojson 数据的网站,推荐一下.支持全国.省级.市级.区/县级.街道/乡镇级以及各级的联动数据,支持导入矢量地图渲染框架中使用,例如:D3.Echarts等 geojso ...
- 携程apollp快速部署DVE集群
1.环境准备: 这里只部署DEV环境 系统环境: 系统 ip ubuntu-18.04-live-server-amd64 192.168.1.112 ubuntu-18.04-live-server ...
- Centos7设置开机启动界面:图形化or命令行
进入root模式下 1.获取当前默认界面 systemctl get-default 2.设置命令行界面 systemctl set-default multi-user.target 3.设置图形化 ...
- 【x86】DRAM、SRAM、DDR、FLASH、双通道的概念科普
内存的DRAM.SRAM 在学习数电的时候就学习过,RAM分为两大类,有DRAM(Dynamic RAM).SRAM(Static RAM),在装机器的时候也经常会听到DDR3 DDR4 DDR5等概 ...