记$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的更多相关文章

  1. [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 ...

  2. 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 ...

  3. 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 ...

  4. csuoj 1119: Collecting Coins

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1119 1119: Collecting Coins Time Limit: 3 Sec  Memo ...

  5. Coins

    Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. One day Hi ...

  6. hdu 1398 Square Coins (母函数)

    Square Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  7. (混合背包 多重背包+完全背包)The Fewest Coins (poj 3260)

    http://poj.org/problem?id=3260   Description Farmer John has gone to town to buy some farm supplies. ...

  8. POJ3260The Fewest Coins[背包]

    The Fewest Coins Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6299   Accepted: 1922 ...

  9. POJ1742 Coins[多重背包可行性]

    Coins Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 34814   Accepted: 11828 Descripti ...

随机推荐

  1. 调试器地址出现大小端紊乱,引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。

    今天在编写一系列新增需求代码后,开始调试代码 发现上个版本正常可运行的代码出现了:引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突. 上个版本数代码 ...

  2. 开发数学系统时,需要掌握的几个基于Web的数学框架

    在做数学系统时,经常要和数学公式打交道,这里介绍几个常用的基于Web的数学处理软件. 数学系统主要包括三类:(1)数学公式的显示,也就是如何使用web显示复杂的数学公式. (2)图像制作,例如长方形, ...

  3. 『基于ArcGIS的Python编程秘籍(第2版)』书本源码

    ArcPy学习 第1章 面向ArcGIS的Python编程语言的基础 略 第2章 管理地图文档和图层 引用当前的地图文档 引用磁盘上的地图文档 获取地图文档的图层列表 限制图层列表 缩放至所选要素 改 ...

  4. 洛谷4248 AHOI2013差异 (后缀数组SA+单调栈)

    补博客! 首先我们观察题目中给的那个求\(ans\)的方法,其实前两项没什么用处,直接\(for\)一遍就求得了 for (int i=1;i<=n;i++) ans=ans+i*(n-1); ...

  5. AutoCAD云产品平台ForgeViewer格式离线部署思路分析

    背景 在上一篇博文中CAD图DWG解析WebGIS可视化技术分析总结提到,利用AutoCAD的自有云产品 Autodesk Forge,能在浏览器中渲染 3D 和 2D 模型数据,实现DWG图形的We ...

  6. [软工顶级理解组] Beta阶段事后分析

    目录 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结 质量提高 会议截图 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰 ...

  7. mongodb的聚合操作

    在mongodb中有时候我们需要对数据进行分析操作,比如一些统计操作,这个时候简单的查询操作(find)就搞不定这些需求,因此就需要使用  聚合框架(aggregation) 来完成.在mongodb ...

  8. 必备的60个常用的Linux命令

    Linux必学的60个命令Linux提供了大量的命令,利用它可以有效地完成大量的工 作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令. ...

  9. js fetch异步请求使用详解

    目录 认识异步 fetch(url) response.json() 结合async和await 异常处理 post请求 认识异步 首先我们得明白请求是一个异步的过程. 因为请求需要时间向服务器发送请 ...

  10. MySQL实战优化之InnoDB整体架构

    一.InnoDB 更新数据得整体架构 每个组件的作用说明: 用一条更新数据来说明每个主键得作用: update student set name = 'zhangsan' where id = 10 ...