【CF813D】Two Melodies

题面

洛谷

题解

$dp$:

设$f[i][j]$表示第一个集合以$i$结尾、第二个集合以$j$结尾的合法长度之和最大是多少

明显有$f[i][j]=f[j][i]$

所以不妨设$i<j$

暴力就是$O(n^3)$的

然后因为合法的转移只有它的绝对值相差一或模$7$

所以直接开两个桶维护一下

模$7$最大的$dp$值、值为所有定值为$dp$值即可

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
inline int gi() {
register int data = 0, w = 1;
register char ch = 0;
while (!isdigit(ch) && ch != '-') ch = getchar();
if (ch == '-') w = -1, ch = getchar();
while (isdigit(ch)) data = 10 * data + ch - '0', ch = getchar();
return w * data;
}
const int MAX_N = 5e3 + 5;
const int MAX_M = 1e5 + 5;
int N, a[MAX_N], f[MAX_N][MAX_N], bln_nxt[MAX_M], bln_mod[10];
int ans = 0;
int main () {
N = gi(); for (int i = 1; i <= N; i++) a[i] = gi();
for (int i = 0; i <= N; i++) {
memset(bln_mod, 0, sizeof(bln_mod));
memset(bln_nxt, 0, sizeof(bln_nxt));
for (int j = 1; j < i; j++) {
bln_nxt[a[j]] = max(bln_nxt[a[j]], f[i][j]);
bln_mod[a[j] % 7] = max(bln_mod[a[j] % 7], f[i][j]);
}
for (int j = i + 1; j <= N; j++) {
f[i][j] = max(bln_nxt[a[j] - 1], bln_nxt[a[j] + 1]) + 1;
f[i][j] = max(f[i][j], f[i][0] + 1);
f[i][j] = max(f[i][j], bln_mod[a[j] % 7] + 1);
f[j][i] = f[i][j];
bln_nxt[a[j]] = max(bln_nxt[a[j]], f[i][j]);
bln_mod[a[j] % 7] = max(bln_mod[a[j] % 7], f[i][j]);
ans = max(ans, f[i][j]);
}
}
printf("%d\n", ans);
return 0;
}

参考文章

【CF813D】Two Melodies的更多相关文章

  1. 【POJ1743】 Musical Theme (二分+后缀数组)

    Musical Theme Description A musical melody is represented as a sequence of N (1<=N<=20000)note ...

  2. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  3. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  4. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  5. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  6. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  7. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  8. Python高手之路【一】初识python

    Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...

  9. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

随机推荐

  1. mysql安装linux_二进制包安装

    1.下载(本地下载www.mysql.com ----->DOWNlOADS------>Archives----->MySQL Community Server---->Li ...

  2. SOJ 1017 Power of Cryptography 库函数精度

    Background Current work in cryptography involves (among other things) large prime numbers and comput ...

  3. 安装chrome jsonView插件

    1.打开 https://github.com : 2.搜索 jsonView 链接:https://github.com/search?utf8=%E2%9C%93&q=jsonview: ...

  4. Input and Output-The input is all the sources of action for your app

    Programs take input and produce output. The output is the result of doing something with the input. ...

  5. tcp 面向连接

    TCP通信时通过三次握手建立连接,这个连接不是虚拟链路,每个IP报文是要寻址,通过路由转发的 那建立的这个连接能够起什么作用啊,感觉建立这个连接和不建立这个连接的效果是一样的啊!因为除去可靠性等机制, ...

  6. gulp基础使用及进阶

    提示:路径中不允许出现中文,否则scss编译会出错,大概. 按照惯例,先检查一下Node.js.npm(cnpm).gulp的版本号 1.新建package.json 我们可以通过手动新建这个配置文件 ...

  7. [教程] macOS打开原生的NTFS读写功能

    Mac本身实际上是支持原生的NTFS读写的,只不过这一功能被隐藏了,但是可以手动打开,这比第三方的的工具要安全得多,有时第三方工具可能会发生整个NTFS分区数据丢失的情况,下面是打开MAC原生NTFS ...

  8. Mybatis Plus启动注入 SQL 原理分析

    1) 问题: xxxMapper 继承了 BaseMapper<T>, BaseMapper 中提供了通用的 CRUD 方法, 方法来源于 BaseMapper, 有方法就必须有 SQL, ...

  9. sql-case when 条件1 then 取值1 when 条件2 then 取值2 else 取值3 end

    遇到 XXX情况 就 XXX 遇不到就 XXX 结束case when …… then …… else …… end 例如一个3条件取值的字段: case when 条件1 then 取值1 when ...

  10. 字体在mac win 系统如何优雅的展示

    我们知道,不同的操作系统,不同的浏览器,页面字体的显示和渲染存在差异. 那么如何设置font-family,能够使字体在不同的环境下,也拥有好的展示效果? 1.操作系统中字体默认的字体 windows ...