Codeforces 1110 D

题意:给\(n\)个麻将,每个麻将上有一个\(1..m\)的整数\(a_i\)。

现在要将这些麻将们分成一个一个三元组,有两种情况:

  • \([i-1,i,i+1]\)
  • \([i,i,i]\)

然后问最多能将这些麻将们分成多少个三元组。

思路1:

结论:对于每一个三元组\([i-1,i,i+1]\),其出现的次数不会超过两次

证明:

我们如果有\(3\)个\([i-1,i,i+1]\)这种三元组,那么我们可以将其转化成\([i,i,i]\)、\([i-1,i-1,i-1]\)、\([i+1,i+1,i+1]\)这\(3\)个三元组,得到同样的效果。

那么就可以考虑\(dp\)了。

考虑\(dp(i,j,k)\)表示当前已经到了第\(i+1\)个位,\([i-1,i,i+1]\)出现了\(j\)次,\([i-2,i-1,i]\)出现了\(k\)次,最多可以形成的三元组个数。至于状态为什么是这样呢,就是想我们的\(i\)麻将被分到了哪些三元组中,其中和前\(i+1\)个有关的就是这两个。

然后转移的话枚举\([i,i+1,i+2]\)这个三元组出现的次数\(l\),然后\(i\)麻将剩下可以供\([i,i,i]\)的三元组使用的数量就是\(cnt_i-j-k-l\),将\(dp(i+1,k,l)\)赋成\(dp(i,j,k)\)加上这个值\(/3\)再加上\(l\)就行了。

思路2:

我们不考虑\([i-1,i,i+1]\)出现了多少次,我们只考虑被\([i,i,i]\)的三元组用过了之后的\(i\)麻将还剩下多少个。事实证明这个不会超过\(9\)个。为什么呢?首先我们的\(i\)被\([i-2,i-1,i]\)用了最多两次,\([i-1,i,i+1]\)用了最多两次,又被\([i,i+1,i+2]\)用了最多两次,再剩下\([i,i,i]\)一次的余量。

然后也是考虑\(dp\)。\(dp(i,j,k)\)表示当前到了第\(i\)个麻将,\(i-1\)还剩下了\(j\)个,\(i-2\)还剩下\(k\)个。然后转移的时候枚举现在对于\([i-2,i-1,i]\)这个三元组用\(l\)个,肯定是小于等于\(j\)和\(k\)的,那么再看\(cnt_i\)用了\(l\)个后还剩下多少,剩下的如果全用\([i,i,i]\)还剩下多少,记这个值为\(x\),再看如果少用几个\([i,i,i]\)变成了多少,是\(x+3y\)个,其中\(x+3y\)应该小于等于\(cnt_i\)和\(9\)。

然后转移到\(dp(i+1,k,x+3y)\)就好辣。

【Codeforces 1110D】Jongmah的更多相关文章

  1. 【Codeforces 1110D】Jongmah FST分析

    Codeforces 1110 D FST分析 dotorya.FizzyDavid.MofK.gamegame.matthew99.chokudai.eddy1021.DBradac.Happy_N ...

  2. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  3. 【codeforces 707E】Garlands

    [题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...

  4. 【codeforces 707C】Pythagorean Triples

    [题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...

  5. 【codeforces 709D】Recover the String

    [题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...

  6. 【codeforces 709B】Checkpoints

    [题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...

  7. 【codeforces 709C】Letters Cyclic Shift

    [题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...

  8. 【Codeforces 429D】 Tricky Function

    [题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...

  9. 【Codeforces 670C】 Cinema

    [题目链接] http://codeforces.com/contest/670/problem/C [算法] 离散化 [代码] #include<bits/stdc++.h> using ...

随机推荐

  1. Integer to Boolean strange syntax

    Question: I'm less than a year into C++ development (focused on other languages prior to this) and I ...

  2. CSS如何让不相等的字符上下对齐

    最后效果: <div class="main"> <span style="font-size:12px;"><dl class= ...

  3. JS如何判断一个对象是否为空、是否有某个属性

    一.js判断一个对象是否为空 方法一: let obj1 = {} let obj2 = {a:1} function empty(obj){ for (let key in obj){ return ...

  4. PHP 在WIN10 下配置

    apache: https://www.apachehaus.com/ php: https://windows.php.net/ https://windows.php.net/ 集成安装配置版:h ...

  5. 安装Vue和创建一个Vue脚手架项目

    首先 安装node.js,安装成功可以在控制台输入[node --version ]查看node的版本,因为安装了node会自带npm所以我们可以用 [npm --version]查到npm版本  如 ...

  6. CSS之fontAwesome代替网页icon小图标

    引言 奥森图标(Font Awesome)提供丰富的矢量字体图标—通过CSS可以任意控制所有图标的大小 ,颜色,阴影. 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常 ...

  7. loj#2002. 「SDOI2017」序列计数(dp 矩阵乘法)

    题意 题目链接 Sol 质数的限制并没有什么卵用,直接容斥一下:答案 = 忽略质数总的方案 - 没有质数的方案 那么直接dp,设\(f[i][j]\)表示到第i个位置,当前和为j的方案数 \(f[i ...

  8. python第五天 字典

    今天,已经系统的学习了一下文件相关操作!对三级菜单代码进行的优化: 菜单文件:以字典格式 menu.txt {'第一层':{'第二层':{'第三层':['内容1','内容2','内容3']}},'第一 ...

  9. k-vim安装及The ycmd server SHUT DOWN (restart with ':YcmRestartServer')这种错误的解决方法

    vim配置 下载地址:https://github.com/wklken/k-vim 安装步骤: 1. clone 到本地 git clone https://github.com/wklken/k- ...

  10. 针对需要使用T3协议的Weblogic2628漏洞解决方案

    针对需要使用T3协议的Weblogic2628漏洞解决方案 前几天用户的服务器中检查到了Weblogic2628l漏洞,并且打过Oracle官方补丁后还是能检测到. 针对此问题,去网上查找了一些资料. ...