题解:CF859C Pie Rules

Luogu - CF859C

Analysis

由题意知每个人选择时都是以最佳情况来选,最佳情况是指他的选择能使后面拿的更多。所以决定最佳情况是来自后面。

还有一个重要性质,不管是 Bob 还是 Alice,只要是拥有决策权的人面对同一个局面,其得到的最大得分一定相等。这样,我们找到了固定状态,就可以 dp 了。

因为我们管的是从某个位置往后面取的最大值,所以可以找某一个位置 i i i n n n 的值。

f ( i , n ) f(i,n) f(i,n) 表示 i ∼ n i \sim n in 区间里,选到 i i i 时,先手取的最大值。 a a a 数组存储原序列, s u m i , j sum_{i,j} sumi,j 表示 a i ∼ a j a_i \sim a_j aiaj 的和。

分两种情况:

  1. 他要拿的当前的数。相当于增加收益,但把选择权给了对方。转移到 s u m i + 1 , n − f ( i + 1 , n ) + a i sum_{i+1,n}-f(i+1,n)+a_i sumi+1,nf(i+1,n)+ai
    意思是 [ i + 1 , n ] [i+1,n] [i+1,n] 区间的和,减去后面的人可以取到的最大值,再加上当前可以拿的 a i a_i ai

  2. 他选当前的数,选后面的。相当于放弃了收益,但保留选择权。转移到 f ( i + 1 , n ) f(i+1,n) f(i+1,n)

发现 f f f 函数第二个参数都是 n n n,可以省略。

于是,设 f [ i ] f[i] f[i] 表示先手面对 i ∼ n i \sim n in 时,可以取到的最大值。
我们只需将两种情况的最大值,赋值给 f i f_i fi 即可:
f i = max ⁡ { f i + 1 , s u m i + 1 , n − f i + 1 + a i } f_i=\max\{f_{i+1},\ sum_{i+1,n}-f_{i+1}+a_i\} fi=max{fi+1, sumi+1,nfi+1+ai}

我们知道第一个选的是 Bob,所以 Bob 得到的就是 f 1 f_1 f1,Alice 得到的就是 Bob 剩下的,即 s u m 1 , n − f 1 sum_{1,n}-f_1 sum1,nf1

Code

考虑倒序 dp。注意 a i a_i ai 的范围是 1 0 6 10^6 106,不开 long long 必然会炸。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;void solve()
{int n;cin >> n;vector <int> a(n + 1); // 原始数组vector <ll> s(n + 1); // 前缀和数组,a[i]<=1e6,开long long!vector <ll> f(n + 2); // dp数组,long longfor(int i = 1; i <= n; i ++){cin >> a[i];s[i] = s[i - 1] + a[i];}for(int i = n; i >= 1; i --){ // 倒推f[i] = max(f[i + 1], (s[n] - s[i]/*i+1~n区间和*/) - f[i + 1] + a[i]);}cout << s[n] - f[1] << ' ' << f[1] << endl;
}signed main()
{ios :: sync_with_stdio(false), cin.tie(0), cout.tie(0);solve();return 0;
}

End

这里是 YLCHUP,谢谢大家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/841090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bazel编译Android程序

一、编译C程序 1、在项目根目录的WROKSPACE文件添加以下配置 //WORKSPACE文件 load("bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive(name "rules_android_ndk",sha256 "b1a5ddd784e6ed915c2035c0db536a…

C# 拓展方法(涉及Linq)

拓展方法 定义一个扩展方法使用扩展方法例如再举个例子终极例子 注意事项与Linq 在C#中&#xff0c;扩展方法是一种特殊的静态方法&#xff0c;允许开发者向现有类型“添加”新的方法&#xff0c;而无需修改该类型的源代码或创建新的派生类型。这种机制提供了一种更为灵活的方式…

OpenGL给定直线起点和终点不同的颜色,使用中点Bresenham画线

用鼠标左键按下确定直线起点&#xff0c;鼠标左键抬起确定直线终点。放一部分代码。 // 中点Bresenham算法.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include <GL/glut.h> #include <iostream> #include <cmath>int windowWidt…

Linux更改系统中的root密码

Linux里面的root密码忘记了怎么办&#xff1f; 1 更改系统中的 root 密码 &#xff08;1&#xff09;键盘 CtrlAltT 快捷键打开终端。 &#xff08;2&#xff09;在终端窗口中输入以下代码&#xff1a; sudo passwd root &#xff08;3&#xff09;输入锁屏密码 &#xf…

解决本地环境正常但Linux服务器上Gson日期解析失败的问题

问题背景 在软件开发过程中&#xff0c;本地环境与服务器环境之间的差异可能导致意外的运行时错误。本文将探讨一个常见的问题&#xff1a;在本地环境中使用 Gson 库解析 JSON 数据时日期字段正常解析&#xff0c;但部署到 Linux 服务器上时却出现 JsonSyntaxException 错误。…

常见的授权场景及其实现方法

在微服务架构中处理授权时&#xff0c;通常考虑多种场景来保证系统的安全性和灵活性。这些场景涵盖了从简单的API权限验证到复杂的基于策略的访问控制。下面&#xff0c;我将详细介绍几种常见的授权场景及其实现方法。 文章目录 1. 简单的权限验证实现方法&#xff1a; 2. 细粒…

从0开始学统计-战斗机保护和代表性抽样

1.什么是抽样研究&#xff1f;为什么要做抽样研究&#xff1f; 抽样研究是一种研究方法&#xff0c;它涉及从整体人群或群体中选取一部分样本来代表整体&#xff0c;以进行研究和推断。在抽样研究中&#xff0c;研究者从总体中选择一个相对较小的样本&#xff0c;通过对这个样…

2024-05学习笔记

最近的学习大多都是和mysql的索引相关的 1.mvcc mvcc是不需要手动配置&#xff0c;是mysql的一个机制 在事务开启时&#xff0c;对涉及到的数据加一个隐藏列&#xff0c;隐藏列对应的值&#xff0c;就是事务id 如果当前是修改操作&#xff0c;就copy一份原来的数据到新的一行…

Topk问题以及二叉树的三种层序遍历和基本操作

一、Topk问题 1、问题描述 TOP-K问题&#xff1a;即求数据结合中前K个最大的元素或者最小的元素&#xff0c;一般情况下数据量都比较大。 比如&#xff1a;专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。 2、思路 对于Top-K问题&#xff0c;能想到的最简单直接的…

【npm如何使用以及常用的包npm包的用法】

npm&#xff08;Node Package Manager&#xff09;是Node.js的包管理工具&#xff0c;用于安装、卸载、更新和管理Node.js应用程序的依赖项。以下是npm的基本使用方法和一些常用npm包的用法&#xff1a; 一、npm的基本使用方法 安装npm&#xff1a;npm通常与Node.js一起安装。…

618快到了,送大家一款自动化脚本工具,一起薅羊毛

前言 一年一次的618活动来了&#xff0c;大家做好准备了&#xff0c;奇谈君为大家准备好用的618神器&#xff0c;解放双手&#xff0c;简单操作就可以把红包拿到手。 京淘自动助手 首次使用前需要进行设置 将手机的无障碍权限和悬浮窗权限打开 设置完成后&#xff0c;可以把…

什么是健康信息卡

健康档案信息卡是交由居民本人保管的个人健康信息卡片。 其内容包括&#xff1a;居民个人主要基本信息、健康档案编码、患有的重要疾病、过敏史以及紧急情况下的联系人及联系方式&#xff0c;还有所属基层医疗机构的责任医生、护士及联系电话等。它主要用于居民在复诊、转诊或接…

Android 14.0 系统多个播放器app时,设置默认播放器

1.概述 在14.0的系统产品开发中,对于在系统中有多个播放器的时候,这时候如果调用代码打开播放器,会出现多个播放器列表让用户选择启动哪个播放器,所以产品开发需求需要设置默认播放器,当打开播放器的时候,就直接打开播放器就可以了,所以就需要了解查询播放器列表流程,然…

JAVA面试题大全(十二)

1、RabbitMQ 的使用场景有哪些&#xff1f; 跨系统的异步通信&#xff0c;所有需要异步交互的地方都可以使消息队列多个应用之间的耦合应用内的同步变异步消息驱动的架构跨局域网&#xff0c;甚至跨城市的通讯 2、RabbitMQ有哪些重要的角色&#xff1f; RabbitMQ的重要角色…

UTC与GPS时间转换-[week, sow]

UTC与GPS时间转换-[week, sow] utc2gpsgps2utc测试参考 Ref: Global Positioning System utc2gps matlab源码 function res utc2gps(utc_t, weekStart)%% parameterssec_day 86400;sec_week 604800;leapsec 18; % 默认周一为一周的开始if nargin < 2weekStart d…

算法打卡 Day10(栈与队列)-用栈实现队列 + 用队列实现栈

今天开始进入栈与队列啦&#xff01; 文章目录 栈与队列理论基础栈 Leetcode 232-用栈实现队列题目描述解题思路 Leetcode 225-用队列实现栈题目描述解题思路 首先我们来学习一下栈与队列的基础知识~ 栈与队列理论基础 栈与队列的区别是&#xff1a;栈是先进后出&#xff0c…

Python | Leetcode Python题解之第111题二叉树的最小深度

题目&#xff1a; 题解&#xff1a; class Solution:def minDepth(self, root: TreeNode) -> int:if not root:return 0que collections.deque([(root, 1)])while que:node, depth que.popleft()if not node.left and not node.right:return depthif node.left:que.appen…

1.4 视频标准组织 - ITU

1.4 视频标准组织 - ITU 关于 ITU 国际电信联盟&#xff08;International Telecommunication Union&#xff0c;简称 ITU&#xff09;是一个国际组织&#xff0c;主要负责确立国际无线电和电信的管理制度和标准。 关于 ITU-R 国际电信联盟无线电通信部门&#xff08;ITU R…

cnVcXsrv 21.1.13.1—VcXsrv 21.1.13中文版本简单说明~~

对于VcXsrv的使用目的和用途相信大家都很了解。前不久VcXsrv做了更新&#xff0c;并且将项目托管到github上了。链接如下&#xff1a; VcXsrv: Windows X-server based on the xorg git sourceshttps://github.com/marchaesen/vcxsrv也可以简单查看如下链接&#xff1a; VcXs…

9数据通信名词解释2

奈氏准则 在理想低通&#xff08;无噪声&#xff0c;带宽受限&#xff09;条件下&#xff0c;为了避免码间串扰&#xff0c;极限码元传输速率为2WBaud&#xff0c;W是信道带宽&#xff0c;单位是赫兹 结论&#xff1a; ①在任何信道中&#xff0c;码元的传输速率是有上限的&…