题目链接:点击查看

题目大意:给出n个馅饼,现在给出一个令牌,规定持有令牌的人可以选择当前的馅饼给谁,然后下一轮令牌给没有拿到馅饼的人,如此往复,一开始鲍勃拿着令牌,问最后两人能吃到多少馅饼,两人肯定都会采取最优策略玩游戏

题目分析:说是博弈,其实就是一个dp。。我的dp还是菜啊,训练完之后zx学长给我讲了一下就豁然开朗的,先别说我能不能推出来转移方程了,我一开始都压根没想到这是一个动态规划的题目,自闭了真的

回到这个题目,我们规定dp[i]为持有令牌的人获得的馅饼数(该数目肯定是最优解),然后因为我们只知道初始时鲍勃拿着令牌,所以我们可以倒着转移状态,从dp[n]开始,这样最后鲍勃和爱丽丝的答案分别就是dp[1]和sum-dp[1]了,在状态转移的过程中我们需要用到一个后缀和sum来辅助进行,sum[i]代表的就是第i个数到第n个数累加之和,因为每个位置持有令牌的人都可以选择将当前馅饼给自己或给对手,那么我们的状态可以简单表示为拿或不拿,也就有了dp[i]=max(拿a[i],不拿a[i]),就有了下面的方程:

dp[i]=max(dp[i+1],a[i]+sum[i+1]-dp[i+1])

我反正dp菜死了,在加上平时dp全都扔给队友。。所以自己是肯定做不出来的了

剩下的就是代码实现了:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=60;int a[N];int dp[N];int sum[N];int main()
{
//  freopen("input.txt","r",stdin);int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",a+i);for(int i=n;i>=1;i--)sum[i]=sum[i+1]+a[i];for(int i=n;i>=1;i--)dp[i]=max(dp[i+1],a[i]+sum[i+1]-dp[i+1]);cout<<sum[1]-dp[1]<<' '<<dp[1]<<endl;return 0;
}

CodeForces - 859C Pie Rules(dp+博弈)相关推荐

  1. Codeforces 859C - Pie Rules

    859C - Pie Rules 思路: dp 我们知道无论谁拿到decider token他拿不拿蛋糕都是确定的,都是使自己最优的结果. 于是 定义状态:dp[i]表示到第i个位置拿到decider ...

  2. *【CodeForces - 859C 】Pie Rules (博弈dp,时光倒流)

    题干: You may have heard of the pie rule before. It states that if two people wish to fairly share a s ...

  3. Codeforces 919D Substring (拓扑图DP)

    Codeforces 919D Substring (拓扑图DP) 手动博客搬家: 本文发表于20180716 10:53:12, 原地址https://blog.csdn.net/suncongbo ...

  4. [CodeForces 332B]Maximum Absurdity[DP]

    题目链接: [CodeForces 332B]Maximum Absurdity[DP] 题意分析: 寻找两个不重叠的长度为k的子串,使得它们之和最大. 解题思路: 第一想法是,处理出从这个点开始,长 ...

  5. 【CodeForces 1042B --- Vitamins】DP+位运算

    [CodeForces 1042B --- Vitamins]DP+位运算 题目来源:点击进入[CodeForces 1042B - Vitamins] Description Berland sho ...

  6. [CodeForces 300D Painting Square]DP

    http://codeforces.com/problemset/problem/300/D 题意:每一次操作可以选一个正方形,令边长为n,如果n为奇数那么可以从中间画一个十字,分成4个大小相等的边长 ...

  7. Codeforces 1322D Reality Show (DP)

    题目链接 https://codeforces.com/contest/1322/problem/D 题面写得非常模糊,很容易读错题,建议参考翻译:https://www.luogu.com.cn/p ...

  8. CodeForces - 1579G Minimal Coverage(dp)

    题目链接:点击查看 题目大意:给出 nnn 个长度不同的木棍.设第 i−1i-1i−1 次放置木棍后的终点为 xxx,那么第 iii 个木棍有且仅有两种放置方法: 放到 [x+1,x+a[i]][x+ ...

  9. CodeForces - 1562E Rescue Niwen!(dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串 sss,将其子串按顺序展开成序列,即 {s1,s1s2,⋯,s1s2-sn,s2,s2s3,s2s3-sn,s3,s3s4,⋯,sn−1 ...

最新文章

  1. 金山网盾监测:游戏玩家下载西西游戏外挂会中大量***
  2. 通过Soul看微内核架构(二)
  3. html5、canvas绘制本地时钟
  4. 038_Steps步骤条
  5. 鼓浪屿天气预报软件测试,厦门鼓浪屿天气预报15天
  6. node.js学习笔记
  7. django中模型类的创建
  8. Linux_基础_进程管理
  9. 使用 SAP Cloud SDK 开发应用时,如何通过环境变量的配置避免硬编码
  10. SAP Spartacus里unit list tree的页面显示和后台响应数据的对应关系
  11. Cloud一分钟 | HR SaaS 平台北森云计算E轮融资1亿美金;云学堂宣布完成C轮5000万美元融资...
  12. 实验一 分治与递归—整数划分 java实现
  13. Linux——系统引导流程学习简单笔记
  14. listview选中高亮
  15. 【CarMaker学习笔记】CarMaker Python API 接口使用方法
  16. acwing每日一题之贝茜放慢脚步
  17. Scrapy爬虫框架之爬取校花网图片
  18. 树状数组的理解以及简单应用
  19. 模态框获取页面请求数据
  20. linux 解决wps文档显示异常问题

热门文章

  1. Condition总结-CountDownLatch源码分析
  2. MyBatis 插件原理与自定义插件-代理和拦截是怎么实现的?
  3. 微服务发现组件Eureka:微服务注册
  4. 算法和时间复杂度概念(一级)
  5. SpringBoot 读取资源文件
  6. activemq使用
  7. mac要装anaconda吗_Anaconda安装教程|Windows,Linux ,Mac OS
  8. df的缺失值处理 df.isnull()和df.dropna()
  9. 工具条内控件背景色设置
  10. Hyperledger fabric 1.0Beta网络组成及构建流程