CodeForces - 859C Pie Rules(dp+博弈)
题目链接:点击查看
题目大意:给出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+博弈)相关推荐
- Codeforces 859C - Pie Rules
859C - Pie Rules 思路: dp 我们知道无论谁拿到decider token他拿不拿蛋糕都是确定的,都是使自己最优的结果. 于是 定义状态:dp[i]表示到第i个位置拿到decider ...
- *【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 ...
- Codeforces 919D Substring (拓扑图DP)
Codeforces 919D Substring (拓扑图DP) 手动博客搬家: 本文发表于20180716 10:53:12, 原地址https://blog.csdn.net/suncongbo ...
- [CodeForces 332B]Maximum Absurdity[DP]
题目链接: [CodeForces 332B]Maximum Absurdity[DP] 题意分析: 寻找两个不重叠的长度为k的子串,使得它们之和最大. 解题思路: 第一想法是,处理出从这个点开始,长 ...
- 【CodeForces 1042B --- Vitamins】DP+位运算
[CodeForces 1042B --- Vitamins]DP+位运算 题目来源:点击进入[CodeForces 1042B - Vitamins] Description Berland sho ...
- [CodeForces 300D Painting Square]DP
http://codeforces.com/problemset/problem/300/D 题意:每一次操作可以选一个正方形,令边长为n,如果n为奇数那么可以从中间画一个十字,分成4个大小相等的边长 ...
- Codeforces 1322D Reality Show (DP)
题目链接 https://codeforces.com/contest/1322/problem/D 题面写得非常模糊,很容易读错题,建议参考翻译:https://www.luogu.com.cn/p ...
- CodeForces - 1579G Minimal Coverage(dp)
题目链接:点击查看 题目大意:给出 nnn 个长度不同的木棍.设第 i−1i-1i−1 次放置木棍后的终点为 xxx,那么第 iii 个木棍有且仅有两种放置方法: 放到 [x+1,x+a[i]][x+ ...
- CodeForces - 1562E Rescue Niwen!(dp)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串 sss,将其子串按顺序展开成序列,即 {s1,s1s2,⋯,s1s2-sn,s2,s2s3,s2s3-sn,s3,s3s4,⋯,sn−1 ...
最新文章
- 金山网盾监测:游戏玩家下载西西游戏外挂会中大量***
- 通过Soul看微内核架构(二)
- html5、canvas绘制本地时钟
- 038_Steps步骤条
- 鼓浪屿天气预报软件测试,厦门鼓浪屿天气预报15天
- node.js学习笔记
- django中模型类的创建
- Linux_基础_进程管理
- 使用 SAP Cloud SDK 开发应用时,如何通过环境变量的配置避免硬编码
- SAP Spartacus里unit list tree的页面显示和后台响应数据的对应关系
- Cloud一分钟 | HR SaaS 平台北森云计算E轮融资1亿美金;云学堂宣布完成C轮5000万美元融资...
- 实验一 分治与递归—整数划分 java实现
- Linux——系统引导流程学习简单笔记
- listview选中高亮
- 【CarMaker学习笔记】CarMaker Python API 接口使用方法
- acwing每日一题之贝茜放慢脚步
- Scrapy爬虫框架之爬取校花网图片
- 树状数组的理解以及简单应用
- 模态框获取页面请求数据
- linux 解决wps文档显示异常问题
热门文章
- Condition总结-CountDownLatch源码分析
- MyBatis 插件原理与自定义插件-代理和拦截是怎么实现的?
- 微服务发现组件Eureka:微服务注册
- 算法和时间复杂度概念(一级)
- SpringBoot 读取资源文件
- activemq使用
- mac要装anaconda吗_Anaconda安装教程|Windows,Linux ,Mac OS
- df的缺失值处理 df.isnull()和df.dropna()
- 工具条内控件背景色设置
- Hyperledger fabric 1.0Beta网络组成及构建流程