题目链接:CF原网  洛谷

题目大意:有 $n$ 个数,每个都不超过 $m$。一个三元组 $(a,b,c)$ 是合法的当且仅当 $a=b=c$ 或者 $a+1=b=c-1$。每个数只能用一次。问最多能凑出一个合法三元组。

$1\le n,m\le 10^6$。


首先我们发现对于一个 $x$,$(x,x+1,x+2)$ 不会出现超过 $2$ 次。因为 $3$ 个或以上的 $(x,x+1,x+2)$ 也可以被拆分成 $(x,x,x),(x+1,x+1,x+1),(x+2,x+2,x+2)$ 这几个三元组,而总个数不变。

那么就可以DP了。(smg???)

首先对序列开桶,设有 $cnt_i$ 个数是 $i$。

设 $dp_{i,j,k}$ 表示现在只考虑 $\le i$ 的数。其中我们规定以后还有 $j$ 个 $i$ 会被用到第二种二元组中,还有 $k$ 个 $i-1$ 会被用到第二种二元组中。

那么就可以知道,$0\le j,k\le 4$(具体原因下面会讲),$j$ 不能超过 $cnt_i$,$k$ 不能超过 $cnt_{i-1}$。

初始状态:$dp_{1,j,0}=(cnt_1-j)/3$。因为有 $j$ 个不能用到第一种三元组。

转移:$dp_{i,j,k}=\max(dp_{i-1,k+l,l}+l+(cnt_i-j-l)/3)$。

具体解释一下,我们枚举用多少个 $i-2$ 配成多少个 $(i-2,i-1,i)$(就是 $l$)。

$i-2$ 再怎么样,前面规定要用的也得用完了,所以转移前的状态第三维是 $l$。

转移后还有 $k$ 个 $i-1$ 要被用到第二种三元组,说明转移前规定了 $k+l$ 个。所以转移前的状态第二维是 $k+l$。

(这也解释了为什么要开到 $4$)

那么有 $l$ 个 $i$ 已经被用到第二种三元组,而有 $j$ 个 $i$ 被规定不能用到第一种三元组,所以至多可以多出 $(cnt_i-l-j)/3$ 个第一种三元组。

答案就是 $dp_{m,0,0}$。规定了以后要用的状态是无效的。

代码的话……由于我基本看着PBdalao的代码写的,所以相似度高达99%……不好意思放了……

CF1110D Jongmah(DP)的更多相关文章

  1. Codeforces 1110D Jongmah (DP)

    题意:你有n个数字,范围[1, m],你可以选择其中的三个数字构成一个三元组,但是这三个数字必须是连续的或者相同的,每个数字只能用一次,问这n个数字最多构成多少个三元组? 解析:首先我们容易发现,我们 ...

  2. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  3. lightOJ 1047 Neighbor House (DP)

    lightOJ 1047   Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...

  4. UVA11125 - Arrange Some Marbles(dp)

    UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...

  5. 【POJ 3071】 Football(DP)

    [POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted ...

  6. 初探动态规划(DP)

    学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...

  7. Tour(dp)

    Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...

  8. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)

    .navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...

  9. Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)

    Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...

随机推荐

  1. 笔记:载入viewcontroller的几种方式

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; ...

  2. Django Rest Framework源码剖析(四)-----API版本

    一.简介 在我们给外部提供的API中,可会存在多个版本,不同的版本可能对应的功能不同,所以这时候版本使用就显得尤为重要,django rest framework也为我们提供了多种版本使用方法. 二. ...

  3. AWK处理数组

    转自ChinaUnix论坛,感谢作者整理. 在文本处理的工作中,awk的数组是必不可少的工具,在这里,同样以总结经验和教训的方式和大家分享下我的一些学习心得,如有错误的地方,请大家指正和补充. awk ...

  4. 单片机程序在内存和FLASH中的空间分配

    本文转载于的tietao的博客!!!http://blog.csdn.net/tietao/article/details/8172411 *******防止自己忘记,固备之. 一句话:基于速度问题, ...

  5. flask前端与后端之间传递的两种数据格式:json与FormData

    json格式 双向! 前端 ==>后端:json格式 后端 ==>前端:json格式 html <!-- html部分 --> <form enctype='applic ...

  6. libgdx学习记录13——矩形CD进度条绘制

    利用ShapeRenderer可进行矩形进度条的绘制,多变形的填充等操作. 这是根据角度获取矩形坐标的函数. public Vector2 GetPoint( float x, float y, fl ...

  7. SQL Server 常用内置函数

    本文用于收集在运维中经常使用的系统内置(built-in)函数,持续整理中 一,常用Metadata函数 1,查看数据库的ID和Name db_id(‘DB Name’),db_name('DB ID ...

  8. Hadoop框架

    1.Hadoop的整体框架 Hadoop由HDFS.MapReduce.HBase.Hive和ZooKeeper等成员组成,其中最基础最重要元素为底层用于存储集群中所有存储节点文件的文件系统HDFS( ...

  9. 浅谈我的UI设计之路

    时光匆匆,进入UI学习已经快两个月了,这段时间过得很充实,因为有压力才有收获. 还记的刚刚学习手绘的时候,对于这个行业只有一个初步的认识,知道自己喜欢,但是真正学习的时候才发现,我要学习的东西还有很多 ...

  10. 290. Word Pattern【LeetCode by java】

    今天发现LintCode页面刷新不出来了,所以就转战LeetCode.还是像以前一样,做题顺序:难度从低到高,每天至少一题. Given a pattern and a string str, fin ...