AGC050B Three Coins
做的时候有思考到是否能转化成移动点问题,但是没有清晰的把他解释出来。
NOIP的时候也一样,T3也有考虑到是否能转为差分,但是也没有清晰的写出来。
自己做题的时候应尽量保证草稿纸和思绪的清晰,而不是在原地乱撞,思路清晰非常重要。
考虑如果我们三次操作:
\(111111 -> 100011\)
\(111111 -> 110001\)
易知一定只有这两种操作是有意义的,否则我们不需要重复操作。
那么我们接着思考,其实操作一等同把开头一个向左移动了3格,操作二等同把末尾一个向右三格。
接着思考,我们发现,我们可以先选中一个接连的三元组让其中三个元素在保持偏序关系下向左或向右移动三的倍数次。
那么我们可设计出一个区间dp。
即\(f_{i,j}\)
两种转移。
\(i,j\)不是在一个三元组中的开头,末尾端点:那么此时枚举中间点分割序列。
\(i,j\)是在三元组中的开头,在中间找一个符合三元组同余性质的点,把序列分割中三点两序列。
#include<bits/stdc++.h>
#define ll long long
#define N 505
int f[N][N];
int a[N];
int n;
int main(){
scanf("%d",&n);
for(int i = 1;i <= n;++i)
scanf("%d",&a[i]);
for(int len = 1;len <= n;++len){
for(int l = 1;l + len - 1 <= n;++l){
int r = l + len - 1;
if((r - l) % 3 == 2){
for(int mid = l + 1;mid < r;++mid)
if((mid - l) % 3 == 1)
f[l][r] = std::max(f[l][r],a[l] + a[r] + a[mid] + f[l + 1][mid - 1] + f[mid + 1][r - 1]);
}
for(int mid = l + 1;mid <= r;++mid)
f[l][r] = std::max(f[l][r],f[l][mid - 1] + f[mid][r]);
}
}
std::cout<<f[1][n]<<std::endl;
}
AGC050B 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 ...
随机推荐
- java---String 和 StringBuffer
Java-String和StringBuffer类 Java String 类 字符串在Java中属于对象,Java提供String类来创建和操作字符串. 创建字符串 创建字符串常用的方法如下: ...
- 【UE4 C++】抛物线路径、发射轨道相关
基于UGameplayStatics Blueprint_PredictProjectilePath_ByObjectType 根据 Object Type,算出抛物线的点集合和检测结果 static ...
- 周末愉快--css画大熊猫
周末找了点轻松的话题,css画大熊猫. 先上效果图 欢迎竞猜大熊猫到底说了什么?? 再上源码 <!DOCTYPE html> <html lang="en"> ...
- JVM:内存结构
JVM:内存结构 说明:这是看了 bilibili 上 黑马程序员 的课程 JVM完整教程 后做的笔记 内容 程序计数器 虚拟机栈 本地方法栈 堆 方法区 直接内存 1. 程序计数器 1.1 定义 P ...
- 主集天线和分集天线——4G天线技术
主集天线和分集天线 分集接收技术是一项主要的抗衰落技术,可以大大提高多径衰落信道传输下的可靠性,在实际的移动通信系统中,移动台常常工作在城市建筑群或其他复杂的地理环境中,而且移动的速度和方向是任意的. ...
- tar 解压分割压缩文件
被分割后的压缩文件必须先合并成一个压缩文件才能正常的解压. 第一步.合并压缩文件 第二步.正常解压 $ls TINA-1.3.tar.gzaa TINA-1.3.tar.gzab TINA-1.3.t ...
- Luogu 520题纪念
一入OI深似海......
- hdu 5056 Boring count (类似单调队列的做法。。)
给一个由小写字母构成的字符串S,问有多少个子串满足:在这个子串中每个字母的个数都不超过K. 数据范围: 1<=T<= 1001 <= the length of S <= 10 ...
- 『学了就忘』Linux基础 — 16、Linux系统与Windows系统的不同
目录 1.Linux严格区分大小写 2.Linux一切皆文件 3.Linux不靠扩展名区分文件类型 4.Linux中所有的存储设备都必须在挂载之后才能使用 5.Windows下的程序不能直接在Linu ...
- prometheus(3)之grafan可视化展现
可视化UI界面Grafana的安装和配置 Grafana介绍 Grafana是一个跨平台的开源的度量分析和可视化工具,可以将采集的数据可视化的展示,并及时通知给告警接收方.它主要有以下六大特点: 1. ...