次元传送门:洛谷P4158

思路

f[i][j][k][0/1]表示在坐标为(i,j)的格子 已经涂了k次 (0是此格子涂错 1是此格子涂对)涂对的格子数

显然的是 每次换行都要增加一次次数

那么当j=1时:

f[i][j][k][]=max(f[i-][m][k-][],f[i-][m][k-][])+;//可以从前一排最后一个转移过来 记得+1
f[i][j][k][]=max(f[i-][m][k-][],f[i-][m][k-][]);//同理 不用+1

当j>1时分成两种情况

  • 当第i格和第i-1格相同
f[i][j][k][]=f[i][j-][k][]+;//最优为前一个不换方案即可+1 因为同色
f[i][j][k][]=max(f[i][j-][k][],f[i][j-][k-][]);//如果不对的话 就要从前面也错不换刷子或者前面对换刷子中取最大值
  • 当第i格和第i-1格不同
f[i][j][k][]=max(f[i][j-][k-][]+,f[i][j-][k][]+);//当前是对的可以从前面是对的但是换刷子或者前面是错的不换刷子中来 记得+1
f[i][j][k][]=max(f[i][j-][k][],f[i][j-][k-][]);//当前是错的可以从前面是对的不用换刷子或者前面是错的但是换刷子中来 不用+1

每次查找都要取ans

因为有可能在任意一格停下

代码

#include<iostream>
using namespace std;
#define maxn 55
int n,m,t,ans;
int map[maxn][maxn];
int f[maxn][maxn][maxn*maxn][];
int main()
{
cin>>n>>m>>t;
for(int i=;i<=n;i++)//输入操作
{
string s;
cin>>s;
for(int j=;j<s.size();j++)
map[i][j+]=s[j]-'';
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=;k<=t;k++)
{
if(j==)//第一排
{
f[i][j][k][]=max(f[i-][m][k-][],f[i-][m][k-][])+;
f[i][j][k][]=max(f[i-][m][k-][],f[i-][m][k-][]);
}
else
{
if(map[i][j]==map[i][j-])//相同
{
f[i][j][k][]=f[i][j-][k][]+;
f[i][j][k][]=max(f[i][j-][k][],f[i][j-][k-][]);
}
else//不同
{
f[i][j][k][]=max(f[i][j-][k-][]+,f[i][j-][k][]+);
f[i][j][k][]=max(f[i][j-][k][],f[i][j-][k-][]);
}
}
ans=max(ans,max(f[i][j][k][],f[i][j][k][]));
}
cout<<ans;
}

【题解】洛谷P4158 [SCOI2009] 粉刷匠(DP)的更多相关文章

  1. 洛谷 P4158 [SCOI2009]粉刷匠 题解

    每日一题 day59 打卡 Analysis 很容易看出是一个dp, dp[i][j[k][0/1]来表示到了(i,j)时,刷了k次,0表示这个没刷,1表示刷了. 于是有转移: 1.换行时一定要重新刷 ...

  2. 洛谷P4158 [SCOI2009]粉刷匠

    传送门 设$dp[i][j][k][0/1]$表示在涂点$(i,j)$,涂了$k$次,当前点的颜色是否对,最多能刷对多少个格子 首先换行的时候肯定得多刷一次 然后是如果和前一个格子颜色相同,那么当前点 ...

  3. Luogu P4158 [SCOI2009]粉刷匠(dp+背包)

    P4158 [SCOI2009]粉刷匠 题意 题目描述 \(windy\)有\(N\)条木板需要被粉刷.每条木板被分为\(M\)个格子. 每个格子要被刷成红色或蓝色. \(windy\)每次粉刷,只能 ...

  4. BZOJ 1296: [SCOI2009]粉刷匠( dp )

    dp[ i ][ j ] = max( dp[ i - 1 ][ k ] + w[ i ][ j - k ] )  ( 0 <= k <= j ) 表示前 i 行用了 j 次粉刷的机会能正 ...

  5. [Bzoj1296][Scoi2009] 粉刷匠 [DP + 分组背包]

    1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2184  Solved: 1259[Submit][Statu ...

  6. P4158 [SCOI2009]粉刷匠(洛谷)

    今天A了个紫(我膨胀了),他看起来像个贪心一样,老师说我写的是dp(dp理解不深的缘故QWQ) 直接放题目描述(我旁边有个家伙让我放链接,我还是说明出处吧(万一出处没有了)我讲的大多数题目都是出自洛谷 ...

  7. BZOJ1296: [SCOI2009]粉刷匠 DP

    Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个 ...

  8. P4158[SCOI2009]粉刷匠

    题目描述 windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个格子最多只能被 ...

  9. [luogu4158 SCOI2009] 粉刷匠(dp)

    传送门 Solution 把状态都记上暴力转移即可 Code //By Menteur_Hxy #include <queue> #include <cmath> #inclu ...

随机推荐

  1. 新浪微博开放平台账号申请(基于dcloud开发)

    注意事项: 1.新浪微博不仅需要appkey和appsecret,而且还需要回调的url,这个链接是可以随便写的,但是需要和在开放平台申请的一致. 2. Android签名包信息部分 (1.)首先安卓 ...

  2. Vue双向绑定原理详解

    前言:Vue最核心的功能之一就是响应式的数据绑定模式,即view与model任意一方改变都会同步到另一方,而不需要手动进行DOM操作,本文主要探究此功能背后的原理. 思路分析 以下是一个最简单的双向绑 ...

  3. Bootstrap4使用教程

    本篇文章写给那些第一次接触Bootstrap框架的学习者,这篇文章将从最基础最基础的Bootstrap下载开始.对Bootstrap有使用经验的同学可以忽略本篇文章. Bootstrap下载 第一种方 ...

  4. windows 查看端口

    windowsnetstat命令查看进程:netstat -ano查看占用端口进程:netstat -ano|findstr “端口号”,例子netstat -ano|findstr “8080”.t ...

  5. oracle 中的角色

    conn sys as sysdba;create role testrole;grant create session, create table, unlimited tablespace to ...

  6. SQL Server的优点与缺点

    一般来说索引会加快查询速度,但会影响插入,修改,删除的数据,且占用物理空间;所以我们应该合理的创建索引,而且应该先创建聚合索引,再创建非聚合索引.要在经常进行查询的列上创建索引,而且如果表列较少的话要 ...

  7. java基础——队列

    目录 前言 基础 实现: 两个队列模拟一个堆栈 前言 java已经提供了堆和栈的相对应的类,这里只是模拟一下队列. 队列是一种先进先出的线性表. 基础 java5中新增加了java.util.Queu ...

  8. MyEclipse中修改servlet模板

    1.在MyEclipse目录下搜索com.genuitec.eclipse.wizards,得到搜索结果 com.genuitec.eclipse.wizards_8.4.100.me20091213 ...

  9. Intel Nehalem微架构Calpella平台机型Windows XP系统下如何开启AHCI硬盘工作模式(XP系统下如何加载AHCI驱动)

    问题描述用户来电表示使用IDE模式安装XP系统后开启AHCI模式会出现开机蓝屏重启的问题,咨询如何在XP下加载AHCI驱动,以便开启BIOS中AHCI选项来发挥硬盘的最佳性能   问题分析 Windo ...

  10. Linux内存管理(text、rodata、data、bss、stack&heap)

    一.各内存区段的介绍 系统内的程序分为程序段和数据段,具体又可细分为一下几个部分: (1)text段-代码段 text段存放程序代码,运行前就已经确定(编译时确定),通常为只读,可以直接在ROM或Fl ...