CF1110D Jongmah
题目地址:CF1110D Jongmah
约定:称形如 \([a-1,a,a+1]\) 这样的三元组为关于 \(a\) 的顺子,形如 \([a,a,a]\) 这样的三元组为关于 \(a\) 的对子。
注意到如果一个关于 \(a\) 的顺子出现三次,则可以将其拆分为三个分别关于 \(a-1,a,a+1\) 的对子。
考虑DP:
设 \(c_i\) 为 \(i\) 的个数。
设 \(f_{i,j,k}\) 为考虑到数 \(i\),关于 \(i\) 的顺子有 \(j\) 个,关于 \(i+1\) 的顺子有 \(k\) 个的最多三元组个数,根据上面的分析,\(j,k\in \{0,1,2\}\)。
状态转移方程:\(f_{i,k,t}=max_{j\in \{0,1,2\},c_i-j-k-t\geq 0}\ (f_{i-1,j,k}+(c_i-j-k-t)/3+t)\)
优化和技巧:
DP到第 \(m+2\) 个,目标:\(ans=f_{m+2,0,0}\)
滚动数组优化空间,\(f\) 数组就可以只开233 (雾,因此目标: \(ans=f_{(m+2)\&1,0,0}=f_{m\&1,0,0}\)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 6;
int n, m, c[N], f[2][3][3];
int main() {
cin >> n >> m;
while (n--) {
int x;
scanf("%d", &x);
++c[x];
}
for (int i = 1; i <= m + 2; i++) {
int p = i & 1, q = p ^ 1;
memset(f[p], 0, sizeof(f[p]));
for (int j = 0; j < 3; j++)
for (int k = 0; k < 3; k++)
for (int t = 0; t < 3; t++)
if (c[i] - j - k - t >= 0)
f[p][k][t] = max(f[p][k][t], f[q][j][k] + (c[i] - j - k - t) / 3 + t);
}
cout << f[m&1][0][0] << endl;
return 0;
}
CF1110D Jongmah的更多相关文章
- CF1110D Jongmah(DP)
题目链接:CF原网 洛谷 题目大意:有 $n$ 个数,每个都不超过 $m$.一个三元组 $(a,b,c)$ 是合法的当且仅当 $a=b=c$ 或者 $a+1=b=c-1$.每个数只能用一次.问最多能 ...
- Codeforces 1110D. Jongmah 动态规划
原文链接https://www.cnblogs.com/zhouzhendong/p/CF1110D.html 题意 给定 n 个数,每一个数都是在 [1,m] 里的整数. 从中取出形如 {x,x,x ...
- Codeforces Global Round 1 - D. Jongmah(动态规划)
Problem Codeforces Global Round 1 - D. Jongmah Time Limit: 3000 mSec Problem Description Input Out ...
- CF 1110 D. Jongmah
D. Jongmah 链接 题意: 一些数字,有两种方式组成一个三元组,[x,x,x],[x,x+1,x+2],每个数字只能用一次,求最多组成多少三元组. 分析: 因为每三个[x,x+1,x+2]是可 ...
- Codeforces 1110D Jongmah [DP]
洛谷 Codeforces 我-我我把这-这这题切了??? 说实话这题的确不难,只是我看到有大佬没做出来有点慌-- 突然发现这题是我在洛谷的第500个AC呢.那就更要写篇题解纪念一下了. 思路 容易想 ...
- cf1110d 线性dp
很精练的一道题 /* dp[i][j][k]表示值i作为最大值结束的边剩k条,i-1剩下j条的情况的结果 dp[i][k][l]是由dp[i-1][j][k]的j决定的,因为k+l是被留下给后面用的, ...
- 【Codeforces 1110D】Jongmah
Codeforces 1110 D 题意:给\(n\)个麻将,每个麻将上有一个\(1..m\)的整数\(a_i\). 现在要将这些麻将们分成一个一个三元组,有两种情况: \([i-1,i,i+1]\) ...
- 【Codeforces 1110D】Jongmah FST分析
Codeforces 1110 D FST分析 dotorya.FizzyDavid.MofK.gamegame.matthew99.chokudai.eddy1021.DBradac.Happy_N ...
- 「日常训练」Jongmah(Codeforces-1110D)
题意 你有n个数字,范围[1, m],你可以选择其中的三个数字构成一个三元组,但是这三个数字必须是连续的或者相同的,每个数字只能用一次,问这n个数字最多构成多少个三元组? 分析 根据官方Editori ...
随机推荐
- ajax传值修改数据
主界面代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- 【强大的Java集成开发工具】MyEclipse 2015 Stable 2.0 for Mac
[简介] MyEclipse是一款 Mac 上的Java 强大的集成开发工具,今天和大家分享最新的 MyEclipse 2015 Stable 2.0 版本,MyEclipse 2015 基于 Ecl ...
- maven编译或者打包web项目显示“软件包 javax.servlet.http 不存在"
2.解决办法: 这是由于缺少servlet-api.jar包,其实tomcat下有,但是在java build path把他加载过来,还是报这个错误,所以我们直接在pom.xml里面加入这个jar包即 ...
- cmd命令对java程序进行编译时出现:编码GBK的不可映射字符
原因:由于JDK是国际版的,在编译的时候,如果我们没有用-encoding参数指定JAVA源程序的编码格式,则java.exe首先获得我们才做系统默认采用的编码格式,也即在编译JAVA程序时,若我们不 ...
- C语言复习---找出一个二维数组的鞍点
前提: 求任意的一个m×n矩阵的鞍点——鞍点是指该位置上的元素在该行上为最大.在该列上为最小, 矩阵中可能没有鞍点,但最多只有一个鞍点. m.n(<=m<=.<=n<=)及矩阵 ...
- layui(六)——upload组件常见用法总结
layui中提供了非常简单的文件上传组件,这里写了一个上传图片的栗子,上传成功后返回图片在服务器的路径,并设置为页面中img的src属性.因为上传十分简单,没什么可说的,就直接上代码了. html代码 ...
- SpringMVC的概念和图解
1.概念 Spring MVC起步:慕课网视频 SpringMVC架构浅析:参考 Spring详解(一)------概述 Spring架构简单描述 2.图片
- uva11916 Emoogle Grid (BSGS)
https://uva.onlinejudge.org/external/119/p11916.pdf 令m表示不能染色的格子的最大行号 设>m行时可以染k种颜色的格子数有ck个,恰好有m行时可 ...
- JAVA中局部变量 和 成员变量有哪些区别
JAVA中局部变量 和 成员变量有哪些区别 1.定义的位置不一样<重点>***局部变量:在方法的内部成员变量:在方法的外部,直接写在类当中 2.作用范围不一样<重点>***局部 ...
- tedu训练营day03
Day03笔记1.作业 1.假如你现在25周岁,每年365天,计算你过了多少个星期天(大概数字) 提示 :地板除 2.毕业薪资为10000元,每年涨20%,十年之后你的薪资为多少元? 提示: 幂运算( ...