【CF933E】A Preponderant Reunion(动态规划)
【CF933E】A Preponderant Reunion(动态规划)
题面
题解
直接做很不好搞,我们把条件放宽,我们每次可以选择两个相邻的非零数让他们减少任意值,甚至可以减成负数(虽然你肯定不会把它弄成负数的)。代价为减少的值。不难证明这个问题的答案不会优于原题目。
我们假定只处理\([l,r]\)这段区间的数\(p_l,p_{l+1},...,p_r\)的答案,为了方便,我们假定数列开头结尾都是\(0\)。
我们令\(c_l=p_l,c_i=\max\{p_i-c_{i-1},0\}\),那么我们必定可以构造一种方案,使得处理这一段区间使得所有数都变成非负数的代价为\(\sum c_i\)。然后设\(f[l][r]\)为这个值。
f[l][r]&=f[l][r-2]+c_{r-1}+c_r\\
&=f[l][r-2]+c_{r-1}+\max\{p_r-c_{r-1},0\}\\
&=f[l][r-2]+\max\{p_r,c_{r-1}\}\\
&\ge f[l][r-2]+p_r\\
&=f[l][r-2]+f[r][r]
\end{aligned}\]
所以一个区间\([l,r]\)可以拆分成\([l,r-2]\)这个区间的打啊,然后是\(r-1\)保留为正数,\([r,r]\)这个区间的答案。然后递归处理前面这一段区间,我们得到的就是每次可以拆分出\(2\)个或者\(1\)个位置使得他们变成\(0\),有\(2\)的原因是当区间长度为\(2\)的时候不得不使得两个位置都是\(0\)而不能拆分。
于是我们就考虑每次放\(0\)段的长度,这个长度可以是\(1\)或者\(2\),然后大力转移一下就可以。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
#define ll long long
#define MAX 300300
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,p[MAX],g[MAX];ll f[MAX];
vector<int> Ans;
void Work(int i){int x=min(p[i],p[i+1]);if(!x)return;Ans.push_back(i);p[i]-=x;p[i+1]-=x;}
int main()
{
n=read();
for(int i=1;i<=n;++i)p[i]=read();
memset(f,63,sizeof(f));f[0]=0;
for(int i=1;i<=n;++i)
{
f[i]=min(f[max(i-2,0)]+p[i],f[max(i-3,0)]+max(p[i],p[i-1]));
if(f[i]==f[max(i-3,0)]+max(p[i],p[i-1]))g[i]=1;
}
ll ans=min(f[n],f[n-1]);
for(int i=n-(ans==f[n-1]);i>0;i=i-2-g[i])
{
Work(i-1);if(g[i])Work(i-2);Work(i);
}
printf("%d\n",(int)Ans.size());
for(int v:Ans)printf("%d\n",v);
return 0;
}
【CF933E】A Preponderant Reunion(动态规划)的更多相关文章
- CF933E A Preponderant Reunion DP
传送门 题解搬运工 设原问题为问题A.每一次减少\(\min\{p_i , p_{i+1}\}\)难以处理,我们考虑将限制变得宽松一些:每一次可以减少\([1,\min\{p_i , p_{i+1}\ ...
- 增强学习(三)----- MDP的动态规划解法
上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...
- 简单动态规划-LeetCode198
题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...
- 动态规划 Dynamic Programming
March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
- C#动态规划查找两个字符串最大子串
//动态规划查找两个字符串最大子串 public static string lcs(string word1, string word2) { ...
- C#递归、动态规划计算斐波那契数列
//递归 public static long recurFib(int num) { if (num < 2) ...
- 动态规划求最长公共子序列(Longest Common Subsequence, LCS)
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划
[BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...
随机推荐
- mysql数据库基础SQL语句总结篇
常用的sql增删改查语句 创建数据库:create database db_name character set utf8;删除数据库:drop database db_name;切换数据库:use ...
- python-16-初识函数
前言 以前写的python代码都是像记流水账一样,那么函数时什么额?它可以在任何需要它的地方进行调用,函数分为: 内置函数,print(),len() 自定义函数 一.自定义函数 1.我们都知道内置函 ...
- Python 周刊第 418 期
新闻 PyCon US 2020 开始接受财务赞助! https://pycon.blogspot.com/2019/10/financial-aid-launches-for-pycon-us-20 ...
- Vue 从入门到进阶之路(十四)
之前的文章我们对 vue 的基础用法已经有了很直观的认识,本章我们来看一下 vue 中的生命周期函数. 上图为 Vue官方为我们提供的完整的生命周期函数的流程图,下面的案例我们只是走了部分情况流程,但 ...
- (三十七)c#Winform自定义控件-有标题的面板-HZHControls
官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...
- Windowns系统下搭建python环境
本文介绍下在windows系统下安装python和python环境搭建. 安装PYTHON 首先,我们去python的官方网站下载python安装包.官网地址:https://www.python.o ...
- GO基础之Map
go开发手册: https://studygolang.com/pkgdoc 一.什么是map 有资料翻译成地图.映射或字典.但是大多数习惯上翻译成集合.1.map是Go中的内置类型,它将一个值与 ...
- iOS-基于TCP连接<Scoket-服务端>
一:前言(本文为TCP服务端) TCP首先要服务器开放一个端口 然后客户端去连接服务端的IP地址和端口号 连接成功之后再进行数据传输 要经历三次握手 二:代码在GitHub 1.需要的工具类 自行下载 ...
- JS 注释
JS 注释 JavaScript 注释可用于提高代码的可读性. 单行注释 // 输出标题: document.getElementById("myH1").innerHTML=&q ...
- Thymeleaf对象的使用:基本对象
Thymeleaf中有许多内置对象,可以在模板中实现各种功能.下面有几个基本对象.Web对象常用有:request.session.servletContext.Thymeleaf提供了几个内置变量p ...