【题解】洛谷P4158 [SCOI2009] 粉刷匠(DP)
次元传送门:洛谷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)的更多相关文章
- 洛谷 P4158 [SCOI2009]粉刷匠 题解
每日一题 day59 打卡 Analysis 很容易看出是一个dp, dp[i][j[k][0/1]来表示到了(i,j)时,刷了k次,0表示这个没刷,1表示刷了. 于是有转移: 1.换行时一定要重新刷 ...
- 洛谷P4158 [SCOI2009]粉刷匠
传送门 设$dp[i][j][k][0/1]$表示在涂点$(i,j)$,涂了$k$次,当前点的颜色是否对,最多能刷对多少个格子 首先换行的时候肯定得多刷一次 然后是如果和前一个格子颜色相同,那么当前点 ...
- Luogu P4158 [SCOI2009]粉刷匠(dp+背包)
P4158 [SCOI2009]粉刷匠 题意 题目描述 \(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 次粉刷的机会能正 ...
- [Bzoj1296][Scoi2009] 粉刷匠 [DP + 分组背包]
1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2184 Solved: 1259[Submit][Statu ...
- P4158 [SCOI2009]粉刷匠(洛谷)
今天A了个紫(我膨胀了),他看起来像个贪心一样,老师说我写的是dp(dp理解不深的缘故QWQ) 直接放题目描述(我旁边有个家伙让我放链接,我还是说明出处吧(万一出处没有了)我讲的大多数题目都是出自洛谷 ...
- BZOJ1296: [SCOI2009]粉刷匠 DP
Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个 ...
- P4158[SCOI2009]粉刷匠
题目描述 windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个格子最多只能被 ...
- [luogu4158 SCOI2009] 粉刷匠(dp)
传送门 Solution 把状态都记上暴力转移即可 Code //By Menteur_Hxy #include <queue> #include <cmath> #inclu ...
随机推荐
- THUSC2017 游记
你若安好,便是晴天. Day 0 中午就要出发了,上午浮躁的不行,根本写不下题去. 到了火车站之后发现教练和lyc和ztc在4车靠近5车的那一边,然而我在5车靠近4车的那边,尴尬…… 本来是想着上了火 ...
- 【代码笔记】iOS-获取现在的日历时间
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...
- python条件判断和循环
条件判断 if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> e ...
- vue + skyline 搭建 一个开发环境
1.之前用的是ext + skyline搭建环境 ,正好最近是做前端的事情,有时间用vue + skyline 搭建一个三维场景 2.准备vue 2.x ,UI 用的是iview 和element ...
- 一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 本文分析 Vault 7 中泄露的 RouterOs 漏洞.漏洞影 ...
- dev gridview指定单元格cell获取坐标
DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo Info2 = gvQueryResult.GetViewInfo() as DevExpre ...
- redis介绍(7)高级用法
redis的过期策略以及内存淘汰机制 分析:这个问题其实相当重要,到底redis有没用到家,这个问题就可以看出来.比如你redis只能存5G数据,可是你写了10G,那会删5G的数据.怎么删的,这个问题 ...
- React +Redux+ Ant Design + echarts 项目实践
项目框架 采用React.js作为项目的框架 采用redux作为数据管理的框架 采用antd作为项目的UI组件 采用echarts完成项目中折线图的绘制 个人项目工作流程总结 拿到UI高保真图片之后先 ...
- 3.Spring MVC return url问题总结
一.return "cartSuccess" 和 return "redirect:/cart/cart.html" 的区别 二.return modelAnd ...
- 转载:eclipse 搭建SSH项目(第二篇,有具体的项目例子)
原文地址:http://blog.csdn.net/yeohcooller/article/details/9316923 读博文前应该注意: 本文提纲:本文通过一个用户注册的实例讲解SSH的整合.创 ...