bzoj2101:[USACO2010 DEC]TREASURE CHEST 藏宝箱
题目描述
但是身为两头牛,她们不能到商店里把金币换成好吃的东西,于是她们只能用这些金币来玩游戏了。
藏宝箱里一共有N枚金币,第i枚金币的价值是Ci。贝西和邦妮把金币排成一条直线,她们轮流取金币,看谁取到的钱最多。贝西先取,每次只能取一枚金币,而且只能选择取直线两头的金币,不能取走中间的金币。
当所有金币取完之后,游戏就结束了。 贝西和邦妮都是非常聪明的,她们会采用最好的办法让自己取到的金币最多。
请帮助贝西计算一下,她能拿到多少钱?
输入
第2~N+1行:第i+1行有一个整数Ci,代表第i块硬币的价值,1≤Ci≤5000
输出
样例输入
4 30 25 10 35
样例输出
60
提示
这题是神仙,大部分人都对那个鬼畜的方程式一脸蒙蔽(开始我也是的),
dp[i][j]=sum[i][j]-min(dp[i+1][j],dp[i][j-1])
这个东西其实很好理解,dp【i】【j】表示从i到j这一段先手所能取得的最大值,(是先手,不一定是贝西)
所有金币都取完时,最后一个一定是后手的人去取,而我们的dp是从里往外扫,而现实游戏中是从外往里扫(其实就是反过来了),所以此时的DP数组的先手,其实是游戏中的后手,而所有金币,不是被先手拿,就是被后手拿,所以总的金币数减去后手所拿的最小金币数,就是先手的最大金币数,而后面的加一减一就表示是拿左边还是右边
然后
在你感觉这是道水题时,发现了空间是64MB,这就是坑人心态,卡时间可以用快读或其他鬼畜优化卡过去,卡空间就。。。。。(你又不能去吧测评机改了。。。)
所以,压维就显得很重要,其实j这一维是可以省掉的,枚举一下区间的长度就可以啦。。。然后DP方程式就变成了这样
dp[i---->i+len]=sum[i--->i+len]-min(dp[i+1----->i+len],dp[i----->i+len-1])
然后循环稍微改一下
1 for(int j=1;j<=n;j++)
2 for(int i=1;i<=n-j;i++)
这样就可以完美的卡掉一维,然后就过了,然后就没然后了。。。
感觉这题刷新了我的认知(还是太弱了,不像这位大佬,一眼就看出来了。。。。)
最后加下代码,巨短
1 #include<iostream> 2 #include<algorithm> 3 4 using namespace std; 5 const int maxn=5010; 6 int sum[maxn]; 7 int dp[maxn]; 8 int f[maxn]; 9 int n,x; 10 int main() 11 { 12 cin>>n; 13 for(int i=1;i<=n;i++) 14 { 15 cin>>x; 16 sum[i]=sum[i-1]+x; 17 dp[i]=x; 18 } 19 for(int j=1;j<=n;j++) 20 { 21 for(int i=1;i<=n-j;i++) 22 { 23 dp[i]=sum[i+j]-sum[i-1]-min(dp[i],dp[i+1]); 24 } 25 } 26 cout<<dp[1]<<endl; 27 return 0; 28 }
最后还是要膜一下机房的各位大佬,尤其是这位,一直坐他旁边感觉怪。。。。
转载于:https://www.cnblogs.com/2529102757ab/p/11341033.html
bzoj2101:[USACO2010 DEC]TREASURE CHEST 藏宝箱相关推荐
- 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 ...
- UVA 12325 宝箱 Zombie‘s Treasure Chest
宝箱 Zombie's Treasure Chest 题面翻译 你有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1::宝物2的体积为S2,价值为V2.输入均为32位带符号整数. ...
- 【BZOJ】2099: [Usaco2010 Dec]Letter 恐吓信
[题意]给定长度为n和m的两个字符串S和T,要求在字符串S中取出若干段拼成T(可重复取),求最小段数,n,m<=50000. [算法]后缀自动机 || 后缀数组 [题解]对串S建SAM,然后在上 ...
- BZOJ2490 Zombie’s Treasure Chest
如果n = lcm(s1, s2),那么就可以直接得到maxV = (v / s1 * v1, v / s2 *v2) 然后还剩下一点体积我们暴力枚举用s1的量,让s1为max(s1, s2)可以减少 ...
- BZOJ——T 2097: [Usaco2010 Dec]Exercise 奶牛健美操
http://www.lydsy.com/JudgeOnline/problem.php?id=2097 Time Limit: 10 Sec Memory Limit: 64 MB Submit: ...
- UVA12325Zombie's Treasure Chest 宝箱
题意:给定两个箱子体积s1,s2,价值v1,v2,给出一个体积为V的宝箱,求可装入的最大价值. 分析:正常写肯定是超时的,把状况简化,第一种,当s1,s2都很小时,就看它们的价值比,v1/s1 ,v2 ...
- [USACO10DEC] Treasure Chest
题目链接 90 Points:智障的区间 DP--设 dp[i][j] 表示区间 [i, j] 能取的最大价值,但我还是 sd 地开了第三维表示先取还是后取的价值. 交上去以为能 A,结果 #2 开心 ...
- BZOJ 2097 [Usaco2010 Dec]Exercise 奶牛健美操
[题意] 给出一棵树.现在可以在树中删去m条边,使它变成m+1棵树.要求最小化树的直径的最大值. [题解] 二分答案.$Check$的时候用$DP$,记录当前节点每个儿子的直径$v[i]$,如果$v[ ...
- UVA - 12325 Zombie's Treasure Chest 暴力
根据两种情况 选择不同枚举 哇! 这题开始用 int 类型的数写的,只有 存最大 价值量的 mix_ 用了long long ,结果交了一遍 wa ,查了一遍 没问题啊?? 后来意识到 max 函数 ...
最新文章
- 速览!CVPR 2020 最新论文
- python里面self_Python中的self详细解析
- python中元组_理解python中的元组
- php实现cookie加密解密
- 分布式实时日志分析解决方案ELK部署架构
- 【九度OJ】题目1078-二叉树遍历
- js 小数点 精准算法
- 存储函数和存储过程的区别
- 如何在Marketing Cloud里创建extension field扩展字段
- Java探索之旅(11)——抽象类与接口
- mysql sleep 5908_mysql连接卡死,很多线程sleep状态,导致CPU中mysqld占用率极高(问题原因还待考证)...
- 《当程序员的那些狗日日子》(三十六)无名的配角
- VMWare虚拟机安装RedHat Linux全过程
- python课堂点名_Python制作课堂点名器,原来还能这么玩!
- 噫吁嚱!文言文亦能编程!此诚年度最骚语言也
- 幂运算的O(lgn)算法
- MT6323详细芯片资料分享 MT6323设计原理图须知
- mac 下安装swoole
- 计算机图形学结课论文,计算机图形学基础教程结课论文
- Linux Perl安装
热门文章
- mysql 储存特殊符号表情报错
- php 生成思维导图,JavaScript如何生成思维导图(mindmap)
- deepin设置快捷键
- Modbus功能码及错误码说明
- 计算机处理器i3 i5,realme Book笔记本高清渲染图曝光 配置上搭载11代酷睿i3/i5处理器...
- 电驴搜索服务器正在连接,电驴未连接到服务器是什么原因?
- 俄勒冈大学计算机科学专业,美国俄勒冈大学计算机与信息科学博士后
- 2019年7月中国编程语言排行榜,Julia工资近四万
- 研究论文:Uniswap V3中的无常损失
- 第一次做Google SEO,如何才能做好谷歌的优化?