做的时候有思考到是否能转化成移动点问题,但是没有清晰的把他解释出来。

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

  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. Visual Studio Debug only user code with Just My Code

    Debug only user code with Just My Code By default, the debugger skips over non-user code (if you wan ...

  2. 从浏览器发送请求给SpringBoot后端时,是如何准确找到哪个接口的?(下篇)

    纸上得来终觉浅,绝知此事要躬行 注意: 本文 SpringBoot 版本为 2.5.2; JDK 版本 为 jdk 11. 前言: 前文:你了解SpringBoot启动时API相关信息是用什么数据结构 ...

  3. BUAA 软工 | 从计算机技术中探索艺术之路

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 第一次作业-热身! 我在这个课程的目标是 掌握软件开发方法学和工程学知识 这个作业在哪个具体方面帮 ...

  4. SDIO总线协议

    SDIO采用HOST-DEVICE模式,所有通信都由HOST端发命令,DEVICE设备只要解析HOST命令就可与HOST进行通信. SDIO总线的几根线: 1.  CLK信号:HOST给DEVICE的 ...

  5. 零基础小白要如何跟好的学习嵌入式Linux(转)

    作为一个新人,怎样学习嵌入式Linux?被问过太多次,特写这篇文章来回答一下. 在学习嵌入式Linux之前,肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会). C语言要学 ...

  6. DP秒思维

    DP算法对于大部分题有着良好的能力,但有些题目我们要转换思维,不能直接的设具体的转态.... 最近做了两道秒题,在这里分享一下: https://ac.nowcoder.com/acm/contest ...

  7. hdu 3038 How Many Answers Are Wrong(并查集)

    题意: N和M.有N个数. M个回答:ai, bi, si.代表:sum(ai...bi)=si.如果这个回答和之前的冲突,则这个回答是假的. 问:M个回答中有几个是错误的. 思路: 如果知道sum( ...

  8. hdu 5093 Battle ships(二分图最大匹配)

    题意: M*N的矩阵,每个格子上是三个之一:*.o.#.                     (1 <= m, n <= 50) *:海洋,战船可以停在上面.      o:浮冰,战船 ...

  9. bootstrap 4 学习笔记

    一.button 颜色类 白色:btn 浅蓝色:btn btn-primary 深蓝色:btn btn-info 绿色:btn btn-success 黄色:btn btn-warning 红色:bt ...

  10. kubernetes常见日志采集问题和解决方案分析

    传统日志与kubernetes日志对比 传统服务 目录固定 重启不会丢失 不用关注标准与错误日志输出 容器服务 节点不固定 重启服务会漂移 需要关注标准与错误日志输出 日志文件重启会丢失 日志目录不固 ...