Codeforces 1110D Jongmah 题解 [ 蓝 ] [ 线性 dp ] [ 观察 ]

news/2025/1/24 1:19:48/文章来源:https://www.cnblogs.com/zhr0102/p/18688900

Jongmah:小清新麻将 dp 题。

观察

首先观察这两个操作的性质,不难发现我们出掉的所有的顺子只要累计出了三次,这三次顺子就一定可以化作出三次相同的单牌。

因此,我们得出结论:任何一个顺子最多只能出 \(2\) 次。

实现

这个性质就很好 dp 了,首先把所有牌扔进桶里是显然的。因为 \(i-2,i-1\) 为开头的顺子会影响 \(i\) 为开头的顺子的计算,所以我们将它们放入状态定义中。

设计 \(dp_{i,j,k}\) 表示当前出到第 \(i\) 位(位就是牌的种类),第 \(i-1\) 位为开头的顺子出了 \(j\) 个,第 \(i\) 位为开头的顺子出了 \(k\) 个。其中 \(0 \le j,k \le 2\)。第 \(i-2\) 位在给后面状态转移时不会用到,只有给当前位转移才会用到。所以在转移的时候枚举第 \(i-2\) 位出的顺子数 \(l\) 即可。

因此有如下转移:

\[dp_{i,j,k}=\max_{l=0}^{2}dp_{i-1,l,j}+\left\lfloor\frac{tot_i-j-k-l}{3}\right\rfloor+l \]

答案即为 \(dp_{m,0,0}\),因为 \(m-1\) 位以后不足三种牌,不能组成顺子。

时间复杂度 \(O(m\times 3^3)\)

代码

#include <bits/stdc++.h>
#define fi first
#define se second
#define lc (p<<1)
#define rc ((p<<1)|1)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
using pi=pair<int,int>;
int n,m,dp[1000005][3][3],tot[1000005],ans;
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>m;for(int i=1;i<=n;i++){int x;cin>>x;tot[x]++;}memset(dp,-0x3f,sizeof(dp));dp[0][0][0]=0;for(int i=1;i<=m;i++){for(int a=0;a<3;a++){for(int b=0;b<3;b++){for(int c=0;c<3;c++){if(tot[i]-a-b-c>=0)dp[i][b][c]=max(dp[i][b][c],dp[i-1][a][b]+(tot[i]-a-b-c)/3+c);}}}}cout<<dp[m][0][0];return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/873983.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

保护模式下的内存访问_1

本文讨论了进入保护模式的一些准备工作,以及保护模式下访问内存的基本机制写在前面 本文讨论了在保护模式下访问内存的准备工作以及具体访问流程,还点出了一些细节问题。由于笔者水平有限,文中难免出现纰漏,恳请各位读者指正。 IA-32架构下段寄存器的变化 我们知道,在x86处…

全面预算体系+报表自动化,实现财务数字化

财务需求 1、经营背景 在公司近几年产业高速发展、外部市场环境快速变化的大背景下,决策层对公司的经营管理、分析调度、决策规划需求日益增加,公司内部管理与行业外部监管对财务数据效率与质量要求更为严格。因此,财务部急需通过数字化转型重塑财务工作流程、提升数据处理效…

【MC】脆骨症整合包开服记录

2024年12月,我们伟大的午睡千秋同志租了一台服务器来玩MC,于是一群CS转MC的人出现了。 然而,令人悲伤的是,2025年1月21日,一群从ins来的野蛮匪徒入侵了服务器,并摧毁了这个存档沟槽的匪徒,初升东曦而午睡千秋先生并没有定期备份,也没有写过自动备份脚本,因此这个服务器…

ACM寒假集训第一次专题任务

ACM寒假集训第一次专题任务 一、 题目:Long Loong解题思路: 因为o出现次数由输入的x所决定,可以想到使用一个循环解决。 AC代码: #include<iostream> using namespace std; int main() {int X;cin>>X;cout<<"L";for(int i=1;i<=X;i++){cout…

《CPython Internals》阅读笔记:p336-p352

《CPython Internals》学习第 17天,p336-p352 总结,总计 17 页。 一、技术总结 1.GDB GDB 是 GNU Dbugger 的缩写。 (1)安装 sudo apt install gdb(2)创建 .gdbinit 文件 touch ~/.gdbinitvim ~/.gdbinit(3)配置 .gdbinit 文件 add-auto-load-safe-path /project/cpython注:…

【python脚本】怎么解密navicat的密码(附代码)

1. 平台检查 import platformif platform.system().lower() != windows:print(Please run this script in Windows.)exit(-1)此部分借助platform.system()函数来判断当前操作系统是否为Windows。若不是,就输出提示信息并终止程序。 2. 导入必要的库 import sys, winreg from C…

### 深入敏捷之道:PSM认证与高效实践的结合

深入敏捷之道:PSM认证与高效实践的结合​ 在敏捷开发的世界中,Scrum因其灵活性和高效性成为全球最受欢迎的框架之一。而PSM(Professional Scrum Master)认证则是验证敏捷实践者专业能力的重要指标,不仅能提升个人职业竞争力,还能帮助团队更高效地实现目标。 Professional…

9. SpringCloud Alibaba Sentinel 流量控制、熔断降级、系统负载,热点规则的部署设置讲解

9. SpringCloud Alibaba Sentinel 流量控制、熔断降级、系统负载,热点规则的部署设置讲解 @目录9. SpringCloud Alibaba Sentinel 流量控制、熔断降级、系统负载,热点规则的部署设置讲解1. Sentinel 是什么?2. Sentinel 控制台3. Sentinel 下载&安装&运行4. Sentine…

MySQL训练营-慢查询诊断问题

慢查询相关参数和建议配置 slow_query_log + long_query_time 日志开关,是否记慢查询日志以及超过多长时间判定为慢查询。 查看参数设置:SHOW VARIABLES LIKE slow_query_log; SHOW VARIABLES LIKE long_query_time;实践建议:set global long_query_time=1; 分析型业务,set…

并发编程 - 线程同步(一)

线程同步确保多线程环境下共享资源安全使用,避免竞争条件和数据不一致。实现方式有避免资源共享、用户模式同步、内核模式同步和混合模式同步。经过前面对线程的尝试使用,我们对线程的了解又进一步加深了。今天我们继续来深入学习线程的新知识 —— 线程同步。01、什么是线程…

API接口开发设计

写接口看似是一个很简单的事情,但是往往越简单的事情越不容易做好,让我们看看如何写好一个接口。 01. 什么是接口 接口其实是一种规范,在生活中随处可见,比如:不同厂商的水管使用统一的水管接口对接、电脑厂商和配件厂商按照统一的 USB 接口标准进行生产完成配对、应用程序…

FZU ACM寒假集训专题一

只有前四题是自己做的,都ac。 做题思路: 前三题比较简单。第四题想法是,一个一个读字母,按照asc码值分别存储个数,用轮数减个数得出还缺几个,最后加在一起。 中间因为不清楚scanf,让getchar读到换行符出错了。 学习总结: 本专题学习了时空复杂度的计算,c++语法糖,还有…