1296: [SCOI2009]粉刷匠

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2339  Solved: 1348
[Submit][Status][Discuss]

Description

windy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。 windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。 如果windy只能粉刷 T 次,他最多能正确粉刷多少格子? 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。

Input

输入文件paint.in第一行包含三个整数,N M T。 接下来有N行,每行一个长度为M的字符串,'0'表示红色,'1'表示蓝色。

Output

输出文件paint.out包含一个整数,最多能正确粉刷的格子数。

Sample Input

3 6 3
111111
000000
001100

Sample Output

16

这题就是

两道很简单的DP拼在一起

①第一步:对于每个木板,dp[i][j]表示前j个格子染i次最多能染多少个格子

②第二步:可以由第一步直接得到:bet[i][j]表示第i个木板染j次最多能染多少个格子

③第三步:背包DP,ba[i][j]表示染前i个木板已经染了j次最多能染多少个格子

答案就是max(ba[n][k]  k∈(1, T))

复杂度:O(nmT)

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[55][55], sum[55][55], dp[2555][55], bet[55][2555], ba[55][2555];
int main(void)
{int n, m, T, i, j, k, p, ans;scanf("%d%d%d", &n, &m, &T);for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf("%1d", &a[i][j]);sum[i][j] = sum[i][j-1]+a[i][j];}}for(i=1;i<=n;i++){memset(dp, 0, sizeof(dp));for(j=1;j<=min(T,m);j++){for(k=1;k<=m;k++){for(p=0;p<=k-1;p++)dp[j][k] = max(dp[j][k], dp[j-1][p]+max(sum[i][k]-sum[i][p], k-p-(sum[i][k]-sum[i][p])));}bet[i][j] = dp[j][m];}}for(i=1;i<=n;i++){for(j=1;j<=T;j++){for(k=1;k<=min(j,m);k++)ba[i][j] = max(ba[i][j], ba[i-1][j-k]+bet[i][k]);}}ans = 0;for(i=1;i<=T;i++)ans = max(ans, ba[n][i]);printf("%d\n", ans);return 0;
}

bzoj 1296: [SCOI2009]粉刷匠(DP+DP)相关推荐

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

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

  2. [BZOJ 1296][SCOI2009]粉刷匠

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

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

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

  4. BZOJ1296(SCOI2009)[粉刷匠]--背包+DP

    [链接] bzoj1296 [解题报告] 很容易想到背包定义g[i][j]g[i][j]表示目前推了ii行,共刷了jj次. 然后我们再对每一行进行考虑. 定义f[i][j]f[i][j]表示目前推到第 ...

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

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

  6. bzoj1296 [SCOI2009]粉刷匠 区间dp+背包

    每一条都是独立的,所以可以分开处理 对于一条,粉刷一定是粉刷完完整的一条是最优的(不会有比它优的),所以枚举次数起点转移 不同条之间就是分组背包的关系了.. 码: #include<iostre ...

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

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

  8. 1296: [SCOI2009]粉刷匠

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

  9. BZOJ1296:[SCOI2009]粉刷匠

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

最新文章

  1. PHP学习笔记-GD库与Jpgraph的使用
  2. 调css支持firefox、IE6、IE7的方法
  3. air display的实践
  4. springboot日志可视化_spring boot面试问题集锦
  5. nutshell_Nutshell中的Java 8语言功能-第1部分
  6. svg载入html,SVG系列教程:SVG简介与嵌入HTML页面的方式
  7. linux dd 进度条,Progress 进度条 – DDProgressHUD
  8. 排序算法——十大排序算法的图示与实现
  9. python最简单单例模式_5种Python单例模式的实现方式
  10. 数据库创建时间,更新时间设计
  11. Zoox又融5亿美元!这家腾讯投资的无人车公司现在估值32亿美元
  12. 力扣-1929 数组串联
  13. background: radial-gradient径向渐变
  14. 区块链 平行链 侧链 区别
  15. python程序设计实训报告-Python编程实践(1)
  16. 【应用统计学】简单随机抽样的区间估计和样本容量的确定
  17. 计算机无法关闭开机密码,电脑开机密码怎么取消
  18. Java——通过Java代码从ftp服务器下载文件
  19. 唧唧DOWN闪退的原因
  20. 【第2期免费送书】 10本机器学习与Python相关书籍等你来领!经典之作,绝对领你心动......

热门文章

  1. 用python画玫瑰花-用python画一朵玫瑰给你
  2. python入门教程pdf-python基础教程:《Python编程无师自通》PDF版百度云下载
  3. python基础教程百度云-python从入门到精通视频教程百度云资源
  4. python基础编程语法-Python基础及语法(十三)
  5. 语音识别介绍(下篇)
  6. JS中的语音识别——Speech Recognition API
  7. LeetCode 701 二叉搜索树中的插入操作
  8. c 语言表达式求值中缀变后缀,表达式求值关于中缀式转后缀式的问题!
  9. 虹软java接摄像头_java基于虹软sdk实现人脸识别(demo)
  10. 可控硅型号怎样识别_可控硅是什么_可控硅型号_可控硅分类及判别_可控硅种类...