洛谷P4158 [SCOI2009]粉刷匠 题解

题目链接:P4158 [SCOI2009]粉刷匠

题意:windy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。

windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。

如果windy只能粉刷 T 次,他最多能正确粉刷多少格子?

一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。

比较简单的dp

设 f[i][j]f[i][j]f[i][j] 为前 iii 块木板粉刷 jjj 次的情况下能正确粉刷的最大格子数

设 g[i][j][k]g[i][j][k]g[i][j][k] 为第 iii 条木板粉刷 jjj 次且只涂了前 kkk 个格子的情况下能正确粉刷的最大格子数

设 S[i][j]S[i][j]S[i][j] 为第 iii 条木板前 jjj 个格子的蓝色格子数

不难发现
f[i][j]=max⁡(f[i][j],f[i−1][j−k]+g[i][k][m])g[i][j][k]=max⁡(g[i][j][k],g[i][j−1][l]+max⁡(S[i][k]−S[i][l],k−l−(S[i][k]−S[i][l])))f[i][j]=\max(f[i][j],f[i-1][j-k]+g[i][k][m]) \\g[i][j][k]=\max(g[i][j][k],g[i][j-1][l]+\max(S[i][k]-S[i][l],k-l-(S[i][k]-S[i][l]))) f[i][j]=max(f[i][j],f[i−1][j−k]+g[i][k][m])g[i][j][k]=max(g[i][j][k],g[i][j−1][l]+max(S[i][k]−S[i][l],k−l−(S[i][k]−S[i][l])))
时间复杂度 O(n4+n2T)O(n^4+n^2T)O(n4+n2T) ( n,mn,mn,m 同阶)

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
#define N (int)(55)
#define T (int)(3e3+15)char s[N];
int n,m,t;
int f[N][T],sum[N][T],g[N][T][N];
void Max(int &a,int b)
{if(b>a)a=b;
}
signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);// freopen("check.in","r",stdin);// freopen("check.out","w",stdout);cin >> n >> m >> t;for(int i=1; i<=n; i++){cin >> s;for(int j=1; j<=m; j++)sum[i][j]=sum[i][j-1]+(s[j-1]=='1');}for(int i=1; i<=n; i++)for(int j=1; j<=m; j++)for(int k=1; k<=m; k++)for(int l=j-1; l<k; l++)Max(g[i][j][k],g[i][j-1][l]+max(sum[i][k]-sum[i][l],k-l-sum[i][k]+sum[i][l]));for(int i=1; i<=n; i++)for(int j=1; j<=t; j++)for(int k=0; k<=min(j,m); k++)Max(f[i][j],f[i-1][j-k]+g[i][k][m]);cout << *max_element(f[n]+1,f[n]+1+t) << endl;return 0;
}

转载请说明出处

洛谷P4158 [SCOI2009]粉刷匠 题解相关推荐

  1. [洛谷P4158][SCOI2009]粉刷匠(动态规划)

    [洛谷P4158][SCOI2009]粉刷匠(动态规划) 题目描述 输入描述 输出描述 示例 输入 输出 题目思路 代码 欢迎关注微信公众号:Java后台开发 题目描述 windy有 N 条木板需要被 ...

  2. 【题解】洛谷P4158 [SCOI2009] 粉刷匠(DP)

    次元传送门:洛谷P4158 思路 f[i][j][k][0/1]表示在坐标为(i,j)的格子 已经涂了k次 (0是此格子涂错 1是此格子涂对)涂对的格子数 显然的是 每次换行都要增加一次次数 那么当j ...

  3. [洛谷]P4158 [SCOI2009]粉刷匠 (#线性dp+背包dp)

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

  4. bzoj 1296 洛谷4158 [SCOI2009]粉刷匠 题解

    题意简述 一个 n × m n\times m n×m的矩阵,每个位置珂能是粉色(0表示)或者是蓝色(1表示),然后你珂以对同一行里连续一段长度的区间染上一种颜色(覆盖型),你能染 t t t次,每次 ...

  5. 【题解】P4158 [SCOI2009]粉刷匠(DP,背包)

    [题解]P4158 [SCOI2009]粉刷匠 是一道资源规划 DP 的好题,但是我想了很久还去看了题解./kk我真菜. 题目链接 P4158 [SCOI2009]粉刷匠 - 洛谷 题意概述 发现自己 ...

  6. P4158 [SCOI2009]粉刷匠(dp)

    P4158 [SCOI2009]粉刷匠(dp) 考虑每行独立计算. 所以可以开一个三维数组:g[i][j][k]g[i][j][k]g[i][j][k]第iii行前jjj列涂了kkk次的最大值. 然后 ...

  7. P4158[SCOI2009]粉刷匠

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

  8. BZOJ1296:[SCOI2009]粉刷匠

    1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2038  Solved: 1182 [Submit][Sta ...

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

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

  10. bzoj 1296: [SCOI2009]粉刷匠(DP+DP)

    1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2339  Solved: 1348 [Submit][Sta ...

最新文章

  1. 什么样的域名利于网站SEO优化?
  2. 一天就能上线音乐教学APP?网易云信首推音乐教学解决方案!
  3. OSCHina技术导向:Java全文搜索框架Lucene
  4. 小学音乐教学和计算机的融合,小学学科教学与计算机深度融合赛课心得体会(共4篇)...
  5. abb机器人伺服电机报闸是什么_ABB机器人电池更换时回零程序Reference
  6. 从零开始学前端:形变(小游戏:3D翻滚盒子) --- 今天你学习了吗?(CSS:Day21)
  7. 【拾贝】hive unoin all map数爆增
  8. Adobe Creative Cloud Cleaner Tool 清除工具
  9. PHP四合一小说漫画听书视频网站源码 带采集
  10. 模式识别与机器学习的简介
  11. PUT和POST的区别
  12. Macbooster8免费mac清理垃圾软件功能介绍
  13. 微信多订单合并付款_微信小商店订单合并打单,操作分享请收藏!
  14. SharePoint 2013 App Development读书笔记1
  15. java博客论坛设计报告,javaweb课程设计报告-个人博客网站的实现(Java).doc
  16. PJSIP编译与使用说明
  17. 热电阻和热电偶的区别
  18. Chainlink 预言机的原理解析
  19. 程序员培养一个兴趣爱好有多重要?
  20. C# 利用HttpWebRequest模拟登陆获取数据设置Accept-Encoding为gzip,deflate后返回的网页是乱码处理

热门文章

  1. GPT+UEFI双硬盘双系统安装
  2. win10 下安装wampserver 的几个坑
  3. bittorrent下载_面向初学者的BitTorrent:如何开始下载Torrent
  4. 关于monitor模式
  5. 用数据来看马拉多纳究竟有多么闪耀!!!
  6. 使用linux时电脑突然蓝屏,win7系统电脑突然蓝屏的原因的原因和解决方法介绍
  7. LINUX查看IP 网关 DNS
  8. 未转变者怎么调服务器难度,未转变者服务器怎么设置出生点 | 手游网游页游攻略大全...
  9. ubuntu安装uTorrent种子下载器
  10. java程序员昵称_那些神秘的Java程序员