题目链接:hdu 6169 gems gems gems

Now there are n gems, each of which has its own value. Alice and Bob play a game with these n gems.
They place the gems in a row and decide to take turns to take gems from left to right.
Alice goes first and takes 1 or 2 gems from the left. After that, on each turn a player can take k or k+1 gems if the other player takes k gems in the previous turn. The game ends when there are no gems left or the current player can’t take k or k+1 gems.
Your task is to determine the difference between the total value of gems Alice took and Bob took. Assume both players play optimally. Alice wants to maximize the difference while Bob wants to minimize it.

题目意思转化为第i个人希望最大化与第i+1个人的差值。

dp[i][j]表示当前人从第i个宝石开始取j个的最大差值。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N = 20001;
 6 const int M = 201;
 7 int a[N];
 8 int sum[N];
 9 int dp[N][M];
10 int main() {
11     int t, n, i, j, ans;
12     scanf("%d", &t);
13     sum[0] = 0;
14     while(t--) {
15         scanf("%d", &n);
16         for(i = 1; i <= n; ++i) {
17             scanf("%d", &a[i]);
18             sum[i] = sum[i-1] + a[i];
19         }
20         for(i = n; i >= 1; --i) {
21             for(j = min(200, n-i+1); j >= 1; --j) {
22                 dp[i][j] = sum[i+j-1] - sum[i-1];
23                 if(i+j+j <= n)dp[i][j] -= max(dp[i+j][j], dp[i+j][j+1]);
24                 else if(i+j+j-1 <= n) dp[i][j] -= dp[i+j][j];
25             }
26         }
27         ans = dp[1][1];
28         if(n>1) ans = max(dp[1][1], dp[1][2]);
29         printf("%d\n", ans);
30     }
31     return 0;
32 }

249ms

转载于:https://www.cnblogs.com/GraceSkyer/p/7543960.html

hdu 6169 gems gems gems【DP】相关推荐

  1. 【DP】【期望】$P1850$换教室

    [DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...

  2. Bailian2760 数字三角形【DP】

    2760:数字三角形 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (图1) 图1给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可 ...

  3. NUC1131 Triangle【DP】

    Triangle 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 图1表示一个数字三角形. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ...

  4. LeetCode:完全平方数【279】【DP】

    LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示 ...

  5. 【DP】序列 题解

    [DP]序列 题解 序列 题目 一个长度为kkk的整数序列bbb 1,bbb 2,-,bkbkbk(1≤bbb 1≤bbb 2≤-≤bkbkbk≤NNN)称为"好序列"当且仅当后一 ...

  6. poj 2411 Mondriaan#39;s Dream 【dp】

    题目:poj 2411 Mondriaan's Dream 题意:给出一个n*m的矩阵,让你用1*2的矩阵铺满,然后问你最多由多少种不同的方案. 分析:这是一个比較经典的题目.网上各种牛B写法一大堆. ...

  7. BestCoder冠军赛 - 1005 Game 【DP】

    [题意] 给出一个set,set中有几个数. 现在给出n个人,环成一圈搞约瑟夫... 开始时从第1号报数,每次从set中随机选出一个数s,等报数到s后,报s的人出圈,其他人继续报数. 最后只剩1人时, ...

  8. 【9.22校内测试】【可持久化并查集(主席树实现)】【DP】【点双联通分量/割点】...

    1 build 1.1 Description 从前有一个王国,里面有n 座城市,一开始两两不连通.现在国王将进行m 次命令,命令可 能有两种,一种是在u 和v 之间修建道路,另一种是询问在第u 次命 ...

  9. zzuliOJ 1894: 985的方格难题 【dp】

    1894: 985的方格难题 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 369  Solved: 75 Description 985走入了一个n ...

最新文章

  1. 6.DeepFM: A Factorization-Machine based Neural Network for CTR Prediction论文详解和代码实现
  2. mysql互为主从复制配置笔记--未读,稍后学习
  3. c语言学生管理系统修改密码,C语言下的学生管理系统(含密码加密和验证码).doc...
  4. 转,Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数
  5. 【渝粤教育】广东开放大学 大学英语1 形成性考核 (43)
  6. websocket的用途/场景
  7. 实战手记:让百万级数据瞬间导入SQL Server
  8. 再见了亲爱的学生们,再见了敬爱的同事们,再见了信狮
  9. Xilinx PLL IP核功能仿真
  10. sql server 2000的数据库还原
  11. matlab四宫格画图_科学网—Matlab画图(一):生成高质量的供发表和展示用的图 - 周建锋的博文...
  12. android 获取微信二维码 DiffDevOAuth.auth
  13. 图解110配线架打线方法
  14. qq空间上传html代码,100分!如何在博客或msn、qq空间里面添加html代码?
  15. c语言的switch中case,c语言switch中case语句
  16. 手游平台系统搭建sdk服务端接口文档
  17. abb机器人离线编程软件叫做_工业机器人离线编程(ABB)1-2 常用离线编程软件介绍.pptx...
  18. 清华大学 zhongguo li 计算机,2013年EI收录中国期刊名单(包括新收录的).xls
  19. Simulink三相异步电机仿真(1)
  20. Spark面试精选题(04)

热门文章

  1. Unity 光照贴图切换失效的问题2018
  2. 【vs调试】PDB文件:每个开发人员都必须知道的
  3. 五款最佳开源的人力资源管理软件
  4. 牢房问题 C++(寻找总因子数为奇数的数)
  5. 华为deveco studio 2.0 附安装教程
  6. 【工具】clion配置git,fork数据结构教科书源码并clone到本地
  7. matlab坐标刻度调整SimWe仿真论坛
  8. PBI中使用SVG自定义折线缩略图
  9. PC端微信小程序使用Fiddler进行爬取抓包
  10. 欧美风个人简历自我介绍PPT模板