Codeforces Global Round 1 D - Jongmah(dp)
题目
n张牌,m种牌,每个牌上一个号
可以连续打三个(3 3 3),也可以连续打顺子(1 2 3)
问最多能打多少组
思路来源
马老师&&航神
题解
首先如果连续3个都有三个,打三个顺和三个仨是一样的,成组消去
打3个相同的也是足够优的,但不是绝对的,
可以证明(好吧我证明不了),
每个拿出6个来专门用于凑顺,
最多给上上个提供2个,上个提供2个,自己开头提供2个
这样足够了,剩下多的用于打仨就行了
dp[i+1][j][k]代表对于值为i的数来说,专门拿出j个去凑以i-1开头的顺子,专门拿出k个去凑以i开头的顺子
dp[i+1][k][l]=max(dp[i][j][k]+(num[i]-j-k-l)/3+l,dp[i+1][k][l]);
dp[下一个值][当前值挪出来凑以上一个值开头的顺子的个数][当前值挪出来凑当前值开头的顺子的个数]
j k l就分别是挪出来凑上上个值 上个值 和当前值的个数
为了避免重复统计,只把这些顺子统计在那个开头的值里面,所以加上l
而最后dp[m+1][0][0]显然对于i=m而言,i-1和i都凑不出顺子了(因为没有i+1),所以均0是最优的
心得
感觉是三步三步滑动的这样一个状态转移dp
其实自己写wa贪心代码的时候也考虑着
如果出现1 3 2,1 2 3,1 2 1,2 2 3,这些连续的三个的情况该怎么搞……
然后还分类讨论贪心来着,
现在看来,暴力让它们一起往后推,是为dp。
代码
滚动数组要清零,不然受i-2那个结果影响。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=1e6+10;
int dp[2][3][3];
int num[maxn],n,m;
int main()
{ scanf("%d%d",&n,&m);for(int i=0;i<n;++i){int x;scanf("%d",&x);num[x]++; }for(int i=1;i<=m;++i){ for(int k=0;k<3;++k){for(int l=0;l<3;++l){dp[(i+1)%2][k][l]=0;}}for(int j=0;j<3;++j){for(int k=0;k<3;++k){for(int l=0;l<3;++l){if(num[i]<j+k+l)continue;dp[(i+1)%2][k][l]=max(dp[i%2][j][k]+(num[i]-j-k-l)/3+l,dp[(i+1)%2][k][l]);}}} }printf("%d\n",dp[(m+1)%2][0][0]); return 0;
}
Codeforces Global Round 1 D - Jongmah(dp)相关推荐
- Codeforces Global Round 14 F. Phoenix and Earthquake 思维 + 并查集
传送门 文章目录 题意: 思路: 题意: 给你nnn个点,mmm条边,限制xxx,每个点都有沥青aia_iai,定义合并两个点即两点之间有边且au+av≥xa_u+a_v\ge xau+av≥x ...
- codeforces global round 23
constest :codeforces global round 23 contest time:2022.10.16 contest grade: 2800 contest rating chan ...
- Codeforces Global Round 1 晕阙记
Codeforces Global Round 1 晕阙记 我做这场比赛的时候晕得要死.做这三道题做太久了,rating涨不起来啊! A 如果愿意的话你可以看做是膜2意义下的运算,写快速幂等各种膜运算 ...
- Codeforces Global Round 3
Codeforces Global Round 3 A. Another One Bites The Dust 有若干个a,有若干个b,有若干个ab.你现在要把这些串拼成一个串,使得任意两个相邻的位置 ...
- Codeforces Global Round 1
Codeforces Global Round 1 题解:The Editorial of the First Codeforces Global Round A:其实mod 2计算一下就行了 B:删 ...
- 【Codeforces Global Round 23】B. Rebellion
Codeforces Global Round 23中B. Rebellion Codeforces比赛记录 文章目录 题目链接: 一.B. Rebellion 题目意思: 上思路: 总结 B. Re ...
- Codeforces Global Round 4-D. Prime Graph(伯特兰-切比雪夫定理)
题目:Codeforces Global Round 4-D. Prime Graph 题意:给出n(顶点的个数),要求所得图满足: 1.无平行边和自环 2.边的总数是个质数 3.每个点的度(也就是点 ...
- Codeforces Global Round 14 E. Phoenix and Computers 思维 + dp
传送门 文章目录 题意: 思路: 题意: 有nnn台电脑,你可以手动打开某个电脑,如果第i−1,i+1i-1,i+1i−1,i+1台电脑都打开了,那么第iii台电脑会自动打开.不能手动打开自动打开的电 ...
- Codeforces Beta Round #17 C. Balance DP
C. Balance 题目链接 http://codeforces.com/contest/17/problem/C 题面 Nick likes strings very much, he likes ...
最新文章
- 失败原因_解析干洗店失败原因
- 他失明40年,只因戴上了这副护目镜,现在竟能数清斑马线 | Nature子刊
- centos6 安装 mantisbt-1.2.8 —— (1) VMware Workstation 12 Pro 虚拟机安装步骤详解(window 10 系统)
- element文件上传有文件但是后台接收为空_程序员提高篇:大规格文件(G)是如何做分片优化的?...
- KP-ABE基于属性的加密加解密算法及Access Tree构建
- vfp体积计算机程序,计算机vfp教程第9章 报表与菜单设计
- [KALI] 开启ssh远程连接
- 中央电视台的糖尿病案例解说 作者:倪海厦
- unity 导入 obj 模型 和 json 数据
- coreldraw x7如何禁网_出现问题如何修改和修复安装coreldraw x7
- PDF如何解密?这些方法你知道吗?
- 怎么查看笔记本内存条型号_笔记本内存条型号简介以及查看方法【图文教程】...
- 多级评论回复功能(纯前端,未连数据库)
- CentOS 7.6 编译安装最新版本glibc2.30 实录
- Linux的firewalld防火墙学习笔记220929
- 最新基于ThinkPHP5.0+BootStrap框架开发的自适应WAP手机端响应式界面博客系统PHP源码
- PyQt4 做界面,编辑文字 QtGui.QLabel遇到文字显示不出来
- 要求统计10个整数中的奇偶数的个数C语言,C语言:输入10个整数,求出它们的和,统计其中偶数的个数,输出其中的奇数....
- 创业者的技能树 -上篇
- Linux下进程间通信方式
热门文章
- Python3 操作MongoDB数据库
- freemaker导出pdf供下载
- 太气愤了!太气愤了!太气愤了!
- 【重榜】易语言锁机病毒模块分享!!!!
- java黄油刀_使用ButterKnife (黄油刀报错)
- Swift 基本知识点之七类与结构体
- android:theme 华为,Launcher for Huawei, Theme Huawei Free
- 压电陶瓷换能器 超声波发射模块驱动原理图及时序
- Android数据存储、文件存储、SQLite数据库简单使用、 sharedPreferences存储(五)
- IntelliJ IDEA必备插件