hdu4701 Game(递推博弈)
题意:
Alice初始有A元,Bob有B元。
有N个物品,第i个物品价值为Ci。Alice和Bob轮流买一些(>=1)物品。不能移动的人输。购买有一个限制,对于第1
个之后物品,只有当第i-1个物品被购买后,第i个物品才能被购买。
保证两人都是最优操作,Alice先手,问谁将取得胜利。
1<=n<=1e6;0<=A,B<=1e9;1<=Ci<=9
分析:
这种博弈问题,一看就是需要递推来求解的
考虑dp[x][money]表示现在这个人有money元,即将面对x..n这么多物品,能否获胜
这样的状态是爆炸的,但是这样的状态如果只存0 1有点浪费,所以可以改进一下状态表示
dp[x]表示现在某个人面对x..n这么多物品,如果想要获胜,至少现在手上要有多少钱
我现在手里有这么多钱:dp[x]
对方手里现在有这么多钱:A+B-sum[x-1]-dp[x]
那么怎么转移呢?
我要赢,我可以枚举从x开始买多少个物品,那么就对应后面的一个状态y>x,满足dp[y]<对方手里的钱 并且 我买的y-x之间的物品我要能承担起
也就是dp[x]>=sum[y-1]-sum[x-1] 并且 A+B-sum[x-1]-dp[x]+1<=dp[y]
也就是dp[x]>=max(sum[y-1]-sum[x-1],A+B+1-sum[x-1]-dp[y])
那么dp[x]肯定是这些y中最小的
也就是dp[x]=min(max(sum[y-1]-sum[x-1],A+B+1-sum[x-1]-dp[y]))=min(max(sum[y-1],A+B+1-dp[y]))-sum[x-1]
这个从后往前一扫是O(n)的
hdu4701 Game(递推博弈)的更多相关文章
- HDU 3469 Catching the Thief (博弈 + DP递推)
Catching the Thief Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 一类SG函数递推性质的深入分析——2018ACM陕西邀请赛H题
题目描述 定义一种有根二叉树\(T(n)\)如下: (1)\(T(1)\)是一条长度为\(p\)的链: (2)\(T(2)\)是一条长度为\(q\)的链: (3)\(T(i)\)是一棵二叉树,它的左子 ...
- 【BZOJ-2476】战场的数目 矩阵乘法 + 递推
2476: 战场的数目 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 58 Solved: 38[Submit][Status][Discuss] D ...
- 从一道NOI练习题说递推和递归
一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...
- Flags-Ural1225简单递推
Time limit: 1.0 second Memory limit: 64 MB On the Day of the Flag of Russia a shop-owner decided to ...
- 利用Cayley-Hamilton theorem 优化矩阵线性递推
平时有关线性递推的题,很多都可以利用矩阵乘法来解决. 时间复杂度一般是O(K3logn)因此对矩阵的规模限制比较大. 下面介绍一种利用利用Cayley-Hamilton theorem加速矩阵乘法的方 ...
- 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】
还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...
- 简单递推 HDU-2108
要成为一个ACMer,就是要不断学习,不断刷题...最近写了一些递推,发现递推规律还是挺明显的,最简单的斐波那契函数(爬楼梯问题),这个大家应该都会,看一点稍微进阶了一点的,不是简单的v[i] = v ...
- [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索
1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...
随机推荐
- 【intellij idea】汇总
1 右键无法创建,找不到scala class https://blog.csdn.net/u011513853/article/details/52896230 2 缩进 https://jingy ...
- JData 整合ArtTemplate的前端框架
因为项目需要和自己的兴趣,几个月前结合模板解析神速的ArtTemplate,自己写了个框架取名JData,多多指教啊---因为一直没时间写文档,为了能够更方便地使用和避免我把代码忘了,今天抽空把文档写 ...
- InChatter系统之客户端消息处理中心
一.模块结构 首先来看下客户端消息处理中心模块的简单结构: ChatCallback:服务器端我们定义的回调接口IChatCallback的客户端实现 ChatMsgCenter:服务端的消息处理中心 ...
- vue ---- Object的一些常用的方法
在对象上添加新属性的几种方法: 直接附代码: 法一:Es6扩展运算符添加属性 法二:利用语法Object.assign(target, ...sources) target目标对象.source ...
- java 文件另存为
FileUtils.copyFile(new File(), new File());
- iis 配置文件解决跨域问题
<system.webServer> <httpProtocol> <customHeaders> <add name="Access-Contro ...
- Java HTTP 组件库选型看这篇就够了
最近项目需要使用 Java 重度调用 HTTP API 接口,于是想着封装一个团队公用的 HTTP client lib. 这个库需要支持以下特性: 连接池管理,包括连接创建和超时.空闲连接数控制.每 ...
- opencv实现人脸,人眼,微笑检测
1.首先实现人脸检测 import cv2 img = cv2.imread("people.jpg",1) #读入图像 #导入人脸级联分类器引擎,“.xml”文件里包含了训练出来 ...
- 取消input聚焦时的边框,去除ios点击时,自动添加的底色效果
/*去除ios点击时,自动添加的底色效果*/ -webkit-tap-highlight-color: rgba(, , , ); /*去除焦点框*/ outline:none;
- C 语言指针 5 分钟教程
指针.引用和取值 什么是指针?什么是内存地址?什么叫做指针的取值?指针是一个存储计算机内存地址的变量.在这份教程里“引用”表示计算机内存地址.从指针指向的内存读取数据称作指针的取值.指针可以指向某些具 ...