P4158 [SCOI2009]粉刷匠(洛谷)
今天A了个紫(我膨胀了),他看起来像个贪心一样,老师说我写的是dp(dp理解不深的缘故QWQ)
直接放题目描述(我旁边有个家伙让我放链接,我还是说明出处吧(万一出处没有了)我讲的大多数题目都是出自洛谷,大佬们有兴趣可以去水一下。
题目描述
windy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。 windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。 如果windy只能粉刷 T 次,他最多能正确粉刷多少格子? 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。 输入格式
第一行包含三个整数,N M T。 接下来有N行,每行一个长度为M的字符串,'0'表示红色,'1'表示蓝色。 输出格式
包含一个整数,最多能正确粉刷的格子数。 输入输出样例
输入 #1复制
3 6 3
111111
000000
001100
输出 #1复制
16
说明/提示
30%的数据,满足 1 <= N,M <= 10 ; 0 <= T <= 100 。 100%的数据,满足 1 <= N,M <= 50 ; 0 <= T <= 2500 。
这个题看起来是个贪心的样子呢,我们来水一下吧。
有个大佬说过:dp不会加一维。
因为空间够,所以我开了4维数组(空间竟然没爆)。a[i][j][k][0/1]的4个维度分别是现在的位置是(i,j),k是现在的步数,第4维有2种:0是涂色错误,1是涂色正确。a[i][j][k][0/1]的值是到达这种情况的最大值。(看着没毛病,妥妥的暴力)
首先这个题有3种情况。
1:现在的状态处于一块木板的开头。
2:现在的字符和上一个字符相符。
3:现在的字符和上一个字符不符。
如果1是成立的,那2,3就可以不管了。
现在把这道题分成3部分来做。
首先是第2部分(第2部分很简单的)
a[i][j][k][0]=a[i][j-1][k][0];
a[i][j][k][1]=a[i][j-1][k][1]+1;
有的同学可能有个疑问,为什么第二句不是下方代码呢?
a[i][j][k][1]=max(a[i][j-1][k][1],a[i][j-1][k-1][0])+1;
我来解释一下,第二种情况是他和前一个相符的,竟然这样,那直接从最前面刚开始不同的地方更改不是更香吗?(真香)
(我相信不会有哪个人把正确的颜色改成错误的,所以这个情况就结束了……)
所以现在我们就把第二种情况解决了(真草率)。开始处理第3种情况(第一种留到最后吧)。
a[i][j][k][0]=a[i][j-1][k][1];
a[i][j][k][1]=max(a[i][j-1][k][0],a[i][j-1][k-1][1])+1;
第一句的解释和上一个同理,我相信同学们不会把一个正确的颜色改成错误的。
但第二句就有2种可能性了,就像样例最后一行一样,全涂成红色反而最多,所以他要从保持上个颜色和换成正确的颜色之间选最大的一个。
然后就是第一种了,第一种就是继承上一行的最大可能性
a[i][j][k][0]=max(a[i-1][m][k-1][0],a[i-1][m][k-1][1]);
a[i][j][k][1]=max(a[i-1][m][k-1][0],a[i-1][m][k-1][1])+1;
最大的地方就是上一行的最后一个了。可能他涂错颜色,总数大,也可能他涂对颜色,总数大。于是max一波(这个样例帮了我们大忙)
还有一个要注意的地方,截取最大值要从中间截取,至于为什么,你们可以把样例里的t换成2试试。(他最大能涂对12个,根本不用涂最后一块,照我这个写法就会错)。
好了,大家自己去试试吧。
感谢收看,感谢这个紫题,这是我第一个通过的紫题,我会记住这一天的(过几天就忘了)。
P4158 [SCOI2009]粉刷匠(洛谷)的更多相关文章
- Luogu P4158 [SCOI2009]粉刷匠(dp+背包)
P4158 [SCOI2009]粉刷匠 题意 题目描述 \(windy\)有\(N\)条木板需要被粉刷.每条木板被分为\(M\)个格子. 每个格子要被刷成红色或蓝色. \(windy\)每次粉刷,只能 ...
- 【题解】洛谷P4158 [SCOI2009] 粉刷匠(DP)
次元传送门:洛谷P4158 思路 f[i][j][k][0/1]表示在坐标为(i,j)的格子 已经涂了k次 (0是此格子涂错 1是此格子涂对)涂对的格子数 显然的是 每次换行都要增加一次次数 那么当j ...
- 洛谷P4158 [SCOI2009]粉刷匠
传送门 设$dp[i][j][k][0/1]$表示在涂点$(i,j)$,涂了$k$次,当前点的颜色是否对,最多能刷对多少个格子 首先换行的时候肯定得多刷一次 然后是如果和前一个格子颜色相同,那么当前点 ...
- 洛谷 P4158 [SCOI2009]粉刷匠 题解
每日一题 day59 打卡 Analysis 很容易看出是一个dp, dp[i][j[k][0/1]来表示到了(i,j)时,刷了k次,0表示这个没刷,1表示刷了. 于是有转移: 1.换行时一定要重新刷 ...
- P4158[SCOI2009]粉刷匠
题目描述 windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个格子最多只能被 ...
- 背包 DP【洛谷P4158】 [SCOI2009]粉刷匠
P4158 [SCOI2009]粉刷匠 windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上 ...
- 【BZOJ1296】[SCOI2009]粉刷匠(动态规划)
[BZOJ1296][SCOI2009]粉刷匠(动态规划) 题面 BZOJ 洛谷 题解 一眼题吧. 对于每个串做一次\(dp\),求出这个串刷若干次次能够达到的最大值,然后背包合并所有的结果即可. # ...
- BZOJ 1296: [SCOI2009]粉刷匠 分组DP
1296: [SCOI2009]粉刷匠 Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上 ...
- BZOJ 1296: [SCOI2009]粉刷匠( dp )
dp[ i ][ j ] = max( dp[ i - 1 ][ k ] + w[ i ][ j - k ] ) ( 0 <= k <= j ) 表示前 i 行用了 j 次粉刷的机会能正 ...
随机推荐
- [搬运]Intellij IDEA 汉化
Github地址: https://github.com/pingfangx/TranslatorX
- ca78a_c++_字符串流在内存中的输入输出(速度快)
/*ca78a_c++_字符串流在内存中的输入输出**字符串流:在内存中的输入输出.(在内存中进行,速度快)**文件流 :是对文件进行输入和输出.(在磁盘里面进行)istringstream(输入), ...
- 对 JsonConvert 的认识太肤浅了,终于还是遇到了问题
一:背景 1. 讲故事 在开始本文之前,真的好想做个问卷调查,到底有多少人和我一样,对 JsonConvert 的认识只局限在 SerializeObject 和 DeserializeObject ...
- C++_继承
C++支持单继承和多继承,并提供3类继承:public.private及protected.在public继承中,每个派生类对象都是基类对象,反之基类对象却不是派生类对象.派生类成员无法直接访问基本的 ...
- Linux 进程间通信(IPC)总结
概述 一个大型的应用系统,往往需要众多进程协作,进程(Linux进程概念见附1)间通信的重要性显而易见.本系列文章阐述了 Linux 环境下的几种主要进程间通信手段. 进程隔离 进程隔离是为保护操作系 ...
- JSON Web令牌(JWT)介绍与使用
手机端接口开发会遇到一个问题是,接口登录后需要返回一个Token.token首先有一点必须唯一,每次请求都需要把token给带上.基于必须唯一的特性,很多朋友在开发是都选择了uuid.是不是token ...
- 查找nginx安装目录并启动
今天公司突然停电,来电后发现服务无法访问了,服务器是部署在公司内 发现ip ping 不通,是服务器没开 手动开了服务器,还是无法访问 可以FTP,但是不能访问服务,说明机器已经开了,有些东西应该没启 ...
- Perl入门 - Perl方法的使用
1.定义一个方法 Perl使用sub定义方法. 语法: sub 方法名称{方法体} 2.调用一个方法 Perl直接使用方法名称调用方法. 调用方式有以下四种: 方法名称: &方法名称: 方法名 ...
- 关于Java的jdbc中 DriverManager.registerDriver(driver); //注册驱动 有没有必要写的思考
加载数据库驱动的时候,有如下部分代码: /1) 注册驱动程序 //给java.sql.Driver接口的引用赋值 com.mysql.jdbc.Driver 实现类对象// Driver driver ...
- Spring Bean各阶段生命周期的介绍
一.xml方式配置bean 二.Aware接口 2.1 BeanNameAware 2.2 BeanFactoryAware 2.3 ApplicationContextAware 2.4 Aware ...