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. html页面边框的简单设置方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. Arrow模块生成时间

    import arrow def isLeapYear(years): ''' 通过判断闰年,获取年份years下一年的总天数 :param years: 年份,int :return:days_su ...

  3. App里面如何正确显示用户头像

    1.说明,一般用户头像在上传的时候都会处理为正方形,如果没有处理该怎么正确显示用户头像呢?解决方案:用css强制 在线地址移动端:戳这里 <div class="main-meimg& ...

  4. 安卓开发_WebView设置打开网页缩放问题

    之前实现打开网页的方式,测试后,发现不能够对网页进行缩放操作,这对部分网页来说是十分不便的, 百度了一下解决方案 其实只需要加几行代码就可以实现网页缩放操作 settings.setUseWideVi ...

  5. Android 裁剪人脸

    人脸裁剪类 public final class FaceCj { private static BitmapFactory.Options BitmapFactoryOptionsbfo; priv ...

  6. 山西WebGIS项目总结

    有一段时间没写blog了,说实话,最近的心态一直在变化,看了一部日剧,回想了这一年所学所见,感觉生活目标变了. 做国土项目这段时间不是很忙,由于数据一直给不到位,时间拖得很久,所以在这期间也在继续学习 ...

  7. 鸟哥的 Linux 私房菜Shell Scripts篇(一)

    参考: http://linux.vbird.org/linux_basic/0340bashshell-scripts.php#script_be http://www.runoob.com/lin ...

  8. 如何开启win10的上帝模式

    用了这么久的电脑,小编才知道还有“上帝模式”这一说,原谅小编的孤陋寡闻.翻阅资料才知道,上帝模式简单来说就是一个全能的控制面板,如控制面板的功能.界面个性化.辅助功能选项等方方面面的控制设置,几乎包含 ...

  9. nginx 了解一下

    先决条件 想要流畅的配置 nginx 需要了解一下内容: 1.nginx 调用方式: 启动 (双击 exe.cmd start nginx .cmd nginx) 使用 (powershell 调用需 ...

  10. TGJSBridge使用

    .在ViewController.h中 #import <UIKit/UIKit.h> #import "TGJSBridge.h" @interface BaseVi ...