BZOJ 2101 [Usaco2010 Dec]Treasure Chest 藏宝箱:区间dp 博弈【两种表示方法】【压维】...
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2101
题意:
共有n枚金币,第i枚金币的价值是w[i]。
把金币排成一条直线,Bessie和Bonny轮流取金币,看谁取到的钱最多。
Bessie先取,每次只能取一枚金币,而且只能选择取直线两头的金币,不能取走中间的金币。当所有金币取完之后,游戏就结束了。
Bessie和Bonny都是非常聪明的,她们会采用最好的办法让自己取到的金币最多。
请帮助Bessie计算一下,她能拿到多少钱?
题解:
区间dp共有两种表示状态的方法:
(1)dp[i][j]:表示区间[i,j]的答案。
一般转移为:dp[i][j] = best(dp[i+1][j], dp[i][j-1])
(2)dp[i][j]:左端点为i,区间长度为j。
一般转移为:dp[i][j] = best(dp[i][j-1], dp[i+1][j-1])
显然,第二种是可以压维的。因为dp[i][j]只与dp[...][j-1]有关。
在此题中,第一种表示会炸空间,所以只能用第二种。
表示状态:
dp[i][j] = max wealth
i:起点为i
j:区间长度为j
表示对于当前区间,先手的最大获利。
找出答案:
ans = dp[1][n]
表示整个区间。
如何转移:
对于一个区间,这个区间内的价值总和是一定的。
那么如果要让自己获利更大,就是要让对方接下来的获利最小。
自己的获利 = 区间价值总和 - 对方获利
即:dp[i][j] = sum(i,i+j-1) - min(dp[i][j-1], dp[i+1][j-1])
边界条件:
dp[i][1] = w[i]
只能拿走剩下的一个硬币。
优化:
压维。
前缀和。
AC Code:
1 // state expression: 2 // dp[i][j] = max wealth 3 // i: start pos 4 // j: len of present section 5 // 6 // find the answer: 7 // dp[1][n] 8 // 9 // transferring: 10 // dp[i][j] = sum(i,i+j-1) - min(dp[i][j-1], dp[i+1][j-1]) 11 // 12 // boundary: 13 // dp[i][1] = w[i] 14 #include <iostream> 15 #include <stdio.h> 16 #include <string.h> 17 #define MAX_N 5005 18 19 using namespace std; 20 21 int n; 22 int w[MAX_N]; 23 int dp[MAX_N]; 24 int sum[MAX_N]; 25 26 void read() 27 { 28 cin>>n; 29 for(int i=1;i<=n;i++) 30 { 31 cin>>w[i]; 32 } 33 } 34 35 void cal_sum() 36 { 37 sum[0]=0; 38 for(int i=1;i<=n;i++) 39 { 40 sum[i]=sum[i-1]+w[i]; 41 } 42 } 43 44 void solve() 45 { 46 cal_sum(); 47 for(int j=1;j<=n;j++) 48 { 49 for(int i=1;i<=n;i++) 50 { 51 if(j==1) dp[i]=w[i]; 52 else dp[i]=sum[i+j-1]-sum[i-1]-min(dp[i],dp[i+1]); 53 } 54 } 55 } 56 57 void print() 58 { 59 cout<<dp[1]<<endl; 60 } 61 62 int main() 63 { 64 read(); 65 solve(); 66 print(); 67 }
转载于:https://www.cnblogs.com/Leohh/p/7629846.html
BZOJ 2101 [Usaco2010 Dec]Treasure Chest 藏宝箱:区间dp 博弈【两种表示方法】【压维】...相关推荐
- bzoj2101【Usaco2010 Dec】Treasure Chest 藏宝箱
2101: [Usaco2010 Dec]Treasure Chest 藏宝箱 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 418 Solved: ...
- Uva12325 Zombie's Treasure Chest [二分区间+模拟退火]
Zombie's Treasure Chest 题目链接 https://cn.vjudge.net/problem/UVA-12325 题意 两种物品无穷多个,第一种物品重量s1s_1s1,价值v ...
- BZOJ 1032 JSOI 2007 祖码Zuma 区间DP
题目大意:依照祖玛的玩法(任意选颜色),给出一段区间.问最少用多少个球可以把全部颜色块都消除. 思路:把输入数据依照连续的块处理.保存成颜色和数量.然后用这个来DP.我们知道,一个单独的块须要两个同样 ...
- bzoj 1260: [CQOI2007]涂色paint(区间DP)
1260: [CQOI2007]涂色paint Time Limit: 30 Sec Memory Limit: 64 MB Submit: 1681 Solved: 1018 [Submit][ ...
- BZOJ 2097 [Usaco2010 Dec]Exercise 奶牛健美操
[题意] 给出一棵树.现在可以在树中删去m条边,使它变成m+1棵树.要求最小化树的直径的最大值. [题解] 二分答案.$Check$的时候用$DP$,记录当前节点每个儿子的直径$v[i]$,如果$v[ ...
- bzoj 1032: [JSOI2007]祖码Zuma(区间DP)
1032: [JSOI2007]祖码Zuma Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1094 Solved: 569 [Submit][S ...
- BZOJ 1778 [Usaco2010 Hol]Dotp 驱逐猪猡 ——期望DP
思路和BZOJ 博物馆很像. 同样是高斯消元 #include <map> #include <ctime> #include <cmath> #include & ...
- BZOJ 1778 Usaco2010 Hol Dotp 驱逐猪猡 期望DP+高斯消元
题目大意:给定一个无向图,炸弹从1号节点出发,每个时刻有P/Q的概率爆炸,如果某个时刻没有爆炸,就会等概率沿着随机一条出边走到下一个城市,求最终每个城市的爆炸概率 #include <cmath ...
- bzoj 1778: [Usaco2010 Hol]Dotp 驱逐猪猡【dp+高斯消元】
算是比较经典的高斯消元应用了 设f[i]为i点答案,那么dp转移为f[u]=Σf[v]*(1-p/q)/d[v],意思是在u点爆炸可以从与u相连的v点转移过来 然后因为所有f都是未知数,高斯消元即可( ...
- [AtCoder Grand Contest 048] D - Pocky Game(区间dp + 博弈)
problem AtCoder solution 注意:本题不是平等博弈,因为先手只能取最左边,后手只能取最右边. 设 f[l][r][k]:f[l][r][k]:f[l][r][k]: 只剩下区间 ...
最新文章
- 每日一皮:当产品经理试图让程序员冷静下来的时候...
- 【错误记录】Android Studio 编译报错 ( Invalid Gradle JDK configuration found )
- 快速寻找满足条件的两个数
- wxWidgets:wxMediaCtr类用法
- 编写代码约定,每行字符长度不超过80列
- 合工大五套卷_2020合工大超越数一五套卷第一套感想
- 【Vscode】调试DotNet Core代码
- 大事件后台管理系统开发实战(中)
- JS 日期对象常用函数(时间常用函数、日期格式化)
- 户口所在地代码查询_毕业生如何查询档案存放地及存档问题?
- Java追加文本内容到txt文件
- Android集成百度语音识别API
- pythoon介绍、安装环境、基础知识、练习题
- 新版犀牛书该不该入手?
- 网站ping端口的操作方法和命令介绍
- iOS越狱设备安装Frida不成功
- php制作特效文字,PPT制作文字特效 PPT特效文字制作教程
- 追求技术之美:云计算开发者的自我修养
- Google Scholar特别好用的镜像网站链接
- 电脑桌面右下方点击失灵,其他桌面区域正常
热门文章
- 5.flask与数据库
- java后端getmonth_Java中的LocalDateTime getMonth()方法
- Python 多环境配置管理
- ubuntu中各个文件夹的作用
- pip 使用豆瓣镜像
- win10计算机升级系统,微软Win10升级助手
- 物无定味适口者珍,Python3并发场景(CPU密集/IO密集)任务的并发方式的场景抉择(多线程threading/多进程multiprocessing/协程asyncio)
- 计算机系统建模_包图
- 计算机 及其 应用系统
- Mysql索引结构全维度比较