[atAGC050B]Three Coins
记$p_{i}$表示该位置是否有硬币
称使得$p_{i,i+1,i+2}$都变为1的操为对$i$的添加操作,使得$p_{i,i+1,i+2}$都变为0的操作为对$i$的删除操作
考虑一个简单的操作:若$p_{i}=1$,且$p_{i+1}=p_{i+2}=p_{i+3}=0$,可以通过执行对$i+1$的添加操作、对$i$的删除操作,使得$p_{i}$"移动"到$p_{i+3}$,我们将这个称之为对$i$的移动操作
接下来,我们证明一个$p_{i}$能通过添加和删除操作得到,当且仅当其能通过添加和移动操作得到:
由于移动操作是由添加和删除操作组合得到的,因此充分性满足
称$p_{i}=1$的来源为最后一次影响到$i$(由于最终$p_{i}=1$,必然是使其变为1)的操作位置,注意到对于来源相同的两个$p_{i}=p_{j}=1$,对其操作的时间也必然相同
考虑当执行对$i$删除操作时,对$p_{i},p_{i+1},p_{i+2}$的1的来源分类讨论,分为三种情况:
1.通过对$i$的添加操作得到,不妨将对$i$的删除操作提前到该次操作,显然无意义;
2.通过对$i-2$和$i+1$的添加操作,这也就是对$i$的移动操作;
3.通过对$i-1$和$i+2$的添加操作,这也就是对$i$和$i+1$的移动操作,等价于先对$i+1$、再对$i$的移动操作
由此,即证明删除操作都可以用添加和移动操作代替
接下来,考虑移动操作不会经过别的1,因此不会改变1的相对顺序,由此可以发现合法当且仅当:
选择第一次操作的3个1(模3不同余),将序列分为4部分(通过移动位置会发生改变),由于其他的1不会移动经过这3个1,要求每一个内部都是合法的
用$f_{i,j}$表示仅考虑区间$[i,j]$的最大值,若$i$或$j$中有一个未被选择,则$f_{i,j}=\max(f_{i+1,j},f_{i,j-1})$,否则分为两种情况:
1.左右端点是同一个,那么枚举中间的点转移即可(嵌套关系)
2.左右端点不是同一个,那么枚举两个的划分即可(并列关系)
时间复杂度为$o(n^{3})$,可以通过

 
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 505
4 int n,a[N],f[N][N];
5 int main(){
6 scanf("%d",&n);
7 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
8 for(int i=n;i;i--)
9 for(int j=i+1;j<=n;j++){
10 f[i][j]=max(f[i+1][j],f[i][j-1]);
11 for(int k=i;k<j;k++)f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]);
12 for(int k=i+1;k<j;k+=3)
13 if ((j-k)%3==1)f[i][j]=max(f[i][j],f[i+1][k-1]+f[k+1][j-1]+a[i]+a[j]+a[k]);
14 }
15 printf("%d",f[1][n]);
16 }
[atAGC050B]Three Coins的更多相关文章
- [LeetCode] Arranging Coins 排列硬币
		You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ... 
- ACM:  Gym 101047M Removing coins in Kem Kadrãn - 暴力
		Gym 101047M Removing coins in Kem Kadrãn Time Limit:2000MS Memory Limit:65536KB 64bit IO Fo ... 
- Codeforces 2016 ACM Amman Collegiate Programming Contest A. Coins(动态规划/01背包变形)
		传送门 Description Hasan and Bahosain want to buy a new video game, they want to share the expenses. Ha ... 
- csuoj 1119: Collecting Coins
		http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1119 1119: Collecting Coins Time Limit: 3 Sec Memo ... 
- Coins
		Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. One day Hi ... 
- hdu 1398 Square Coins (母函数)
		Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ... 
- (混合背包 多重背包+完全背包)The Fewest Coins (poj 3260)
		http://poj.org/problem?id=3260 Description Farmer John has gone to town to buy some farm supplies. ... 
- POJ3260The Fewest Coins[背包]
		The Fewest Coins Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6299 Accepted: 1922 ... 
- POJ1742 Coins[多重背包可行性]
		Coins Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 34814 Accepted: 11828 Descripti ... 
随机推荐
- CAD/DWG图Web网页可视化技术之栅格和矢量瓦片
			背景 在上一篇博文中CAD图DWG解析WebGIS可视化技术分析总结提到,实现CAD/DWG图形Web展示的思路一般为解析AutoCAD图形格式,然后转成html5所能绘制的格式如svg,geojso ... 
- selenium 4.0 发布
			我们非常高兴地宣布Selenium 4的发布.这适用于Java..net.Python.Ruby和Javascript.你可以从你最喜欢的包管理器或GitHub下载它! https://github. ... 
- CentOS7部署Prometheus
			部署Prometheus监控报警系统 一.Prometheus介绍 Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB):Prometheus使用Go语言开发, ... 
- C++ 与 Visual Studio 2022 和 WSL(五)——WSL2
			Build and Debug C++ with WSL 2 Distributions and Visual Studio 2022 References Build and Debug C++ w ... 
- python json中的 dumps loads函数
			一.概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()函数是将一个Python数据类型列表进行js ... 
- python使用Django框架开发简单项目
			一. (1)使用idea生成一个python项目,安装Django框架: pip install django==1.8.2 (2)初始化项目: django-admin startproject x ... 
- Manjaro / ArchLinux 安装网易云音乐解决搜索不能输入中文方法
			0. 安装网易云音乐 yay -S netease-cloud-music 1.先安装qcef这个软件包. sudo yay -S qcef 2.编辑/opt/netease/netease-clou ... 
- pyqgis环境配置
			配置pyqgis开发环境时,很多网上教程写的非常繁琐,这里仅仅找了一个最简单的配置方法,使用pycharm的IDE,安装QGIS软件后,在pycharm的ProjectInterpreter里面填写Q ... 
- 利用DMA实现采样数据的直接搬运存储
			尝试了下STM32的ADC采样,并利用DMA实现采样数据的直接搬运存储,这样就不用CPU去参与操作了. 找了不少例子参考,ADC和DMA的设置了解了个大概,并直接利用开发板来做一些实验来验证相关的操作 ... 
- PCIE学习笔记--PCIe错误源详解(二)
			转载地址:http://blog.chinaaet.com/justlxy/p/5100057799 这篇文章主要介绍事务(Transaction)错误.链路流量控制(Link Flow Contro ... 
