博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cf731E
阅读量:5797 次
发布时间:2019-06-18

本文共 737 字,大约阅读时间需要 2 分钟。

题意:一个游戏,由n张贴纸组成。贴纸排成一排,并且纸条上标有数字,玩家轮流揭下m张从左到右连续的纸条(m大等2),揭下后玩家得分累加这些纸条的sum,并且在剩下纸条最左边贴上新的纸条,数值为揭下纸条的sum。最后只剩一张纸条时游戏结束。每个玩家的策略是使敌我分差尽可能大。求这个分差。

这道题是那一场最难的题,交的人最少,然而代码只有几行(一个for循环搞定

题解引入了一个“zero-sum game”来阐述这一类游戏,并且说这一类游戏通常用dp解(%%%

我们发现每个状态只跟我们已经取走了多少张纸条有关,我们设状态dp[i]表示已经取走i个纸条,一开始分差为0的状态,装的值为这种状态下最大分差

状态转移为dp[i]=max(sum[j]-dp[j])    i<j<=n

推的时候维护最大值,O(n)草翻这题(%%%%

1 #include
2 using namespace std; 3 #define N 200005 4 int n,s[N],dp[N],maxx; 5 int main(){ 6 scanf("%d",&n); for(int a,i=1;i<=n;i++) scanf("%d",&a),s[i]=s[i-1]+a; 7 maxx=s[n]; 8 for(int i=n-1;i>=1;i--) 9 dp[i]=maxx,maxx=max(maxx,s[i]-dp[i]);10 printf("%d\n",dp[1]);11 return 0;12 }

 

转载于:https://www.cnblogs.com/enigma-aw/p/5997497.html

你可能感兴趣的文章
哪个线程执行 CompletableFuture’s tasks 和 callbacks?
查看>>
《数据科学与大数据分析——数据的发现 分析 可视化与表示》一2.10 练习
查看>>
Oracle ASM 翻译系列第六弹:高级知识 如何映射asmlib管理的盘到它对应的设备名...
查看>>
多线程之volatile关键字
查看>>
如何判断webview是不是滑到底部
查看>>
Raptor实践2——控制结构
查看>>
Smartisan OS一步之自定义拖拽内容
查看>>
海贼王十大悲催人物
查看>>
org.hibernate.MappingException: No Dialect mapping for JDBC type: -1 搞定!
查看>>
热点热词新闻资讯API开放接口(永久免费开放)
查看>>
【第二章】 IoC 之 2.2 IoC 容器基本原理 —— 跟我学Spring3
查看>>
8.1_Linux习题和作业
查看>>
我的友情链接
查看>>
11.排序算法_6_归并排序
查看>>
Redis redis-cli 命令列表
查看>>
.NET框架设计—常被忽视的框架设计技巧
查看>>
ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
查看>>
BigDecimal 舍入模式(Rounding mode)介绍
查看>>
开源 免费 java CMS - FreeCMS1.2-标签 infoSign
查看>>
开源 免费 java CMS - FreeCMS1.9 移动APP生成栏目列表数据
查看>>