BZOJ 1296 粉刷匠
Description
windy有\(N\)条木板需要被粉刷。每条木板被分为\(M\)个格子。 每个格子要被刷成红色或蓝色。 windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。 如果windy只能粉刷\(T\)次,他最多能正确粉刷多少格子? 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。
Input
第一行包含三个整数\(N,M,T\)。 接下来有\(N\)行,每行一个长度为\(M\)的字符串,\(0\)表示红色,\(1\)表示蓝色。
Output
包含一个整数,最多能正确粉刷的格子数。
Sample Input
3 6 3
111111
000000
001100
Sample Output
16
HINT
\(30\%\)的数据,满足\(1 \le N,M \le 10\);$0 \le T \le 100 $。
\(100\%\)的数据,满足\(1 \le N,M \le 50\);\(0 \le T \le 2500\) 。
一个很明显的dp,\(f_{i,j}\)表示该木板前\(i\)格涂\(j\)次得到的最多格子数;\(g_{i,j}\)表示前\(i\)块木板涂\(j\)次得到的最多格子数。
转移如下(\(pre_{i}\)表示该木板前\(i\)格\(1\)的数目):
\(f_{i,j} = max(f_{i,j},f_{k,j-1}+max(pre_{i}-pre_{k},i-k-(pre_{i}-pre_{k})))\);
\(g_{p,i} = max(g_{p,i},g_{p-1,j}+f_{m,i-j})\)。
代码如下:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define inf (1<<29)
#define maxn (60)
#define maxt (2510)
int n,m,t,pre[maxn],f[maxn][maxt],g[maxn][maxt];
inline void dp(int p)
{
memset(f,0,sizeof(f));
for (int i = 1;i <= m;++i)
for (int j = 1;j <= t;++j)
{
f[i][j] = f[i-1][j];
for (int k = 0;k < i;++k)
f[i][j] = max(f[i][j],f[k][j-1]+max(pre[i]-pre[k],i-k-(pre[i]-pre[k])));
}
for (int i = 1;i <= t;++i)
for (int j = 0;j <= i;++j)
g[p][i] = max(g[p][i],g[p-1][j]+f[m][i-j]);
}
int main()
{
freopen("1296.in","r",stdin);
freopen("1296.out","w",stdout);
scanf("%d %d %d",&n,&m,&t);
for (int p = 1;p <= n;++p)
{
for (int i = 1;i <= m;++i) scanf("%1d",pre+i),pre[i] += pre[i-1];
dp(p);
}
printf("%d",g[n][t]);
return 0;
}
BZOJ 1296 粉刷匠的更多相关文章
- Codevs 1744 格子染色==BZOJ 1296 粉刷匠
1744 格子染色 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 有 n 条木板需要被粉 ...
- BZOJ 1296 粉刷匠(分组背包套DP)
刚开始往网络流的方向想.建不出图... 因为每次只能对一行进行染色.每一行都是独立的. 对于每一行,因为格子只能染一次,所以可以发现这是一个多阶段决策问题,这个决策就是当前格子染0还是染1. 令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 次粉刷的机会能正 ...
- BZOJ 1296(SCOI 2009) 粉刷匠
1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2544 Solved: 1466 [Submit][Statu ...
- 1296: [SCOI2009]粉刷匠[多重dp]
1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1919 Solved: 1099[Submit][Statu ...
- 2014.7.8模拟赛【笨笨当粉刷匠】|bzoj1296 [SCOI]粉刷匠
笨笨太好玩了,农田荒芜了,彩奖用光了,笨笨只好到处找工作,笨笨找到了一份粉刷匠的工作.笨笨有n条木板需要被粉刷.每条木板被分成m个格子,每个格子要被刷成红色或蓝色.笨笨每次粉刷,只能选择一条木板上一段 ...
- 【BZOJ1296】[SCOI2009]粉刷匠(动态规划)
[BZOJ1296][SCOI2009]粉刷匠(动态规划) 题面 BZOJ 洛谷 题解 一眼题吧. 对于每个串做一次\(dp\),求出这个串刷若干次次能够达到的最大值,然后背包合并所有的结果即可. # ...
- bzoj1296【SCOI2009】粉刷匠
1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1479 Solved: 837 [id=1296" ...
随机推荐
- android_小总结_方法过时的兼容处理
随着android系统的升级,有些过时的方法已经不再使用,但是又要兼容老的版本,所以这个时候可以使用反射来处理下 举个列子pull_to_refresh 中有个方法找不到==initializeScr ...
- 关于session的实现:cookie与url重写
本文讨论的语境是java EE servlet. 我们都知道session的实现主要两种方式:cookie与url重写,而cookie是首选(默认)的方式,因为各种现代浏览器都默认开通cookie功能 ...
- iOS开发总结-UIWebView 集成 浏览器
// // detailWebViewController.m // BJ // // Created by shirenfeng on 16/11/6. // Copyright © 2016年 c ...
- Gwt 整合FusionCharts及封装搜狗地图时出现的问题
smartGwt 整合FusionCharts 把需要的.swf文件和FusionCharts.js放在war下面(路径就自己定了) 可以工程的html文件中引FusionCharts.js文件 也可 ...
- IOS-AssetsLibrary(相册)框架介绍
AssetsLibrary框架介绍: AssetsLibrary框架包含了ALAssetsLibrary,ALAssetsGroup,ALAsset,ALAssetsFilter,ALAssetRep ...
- 基于GPUImage的实时美颜滤镜
1.背景 前段时间由于项目需求,做了一个基于GPUImage的实时美颜滤镜.现在各种各样的直播.视频App层出不穷,美颜滤镜的需求也越来越多.为了回馈开源,现在我把它放到了GitHub https:/ ...
- VMware安装CentOS后网络设置
在使用CentOS虚拟机后,出现了无法上网的情况,使用主机ping虚机地址可以ping通,而虚机ping不通主机,同时虚机也无法ping通其他的网址或ip,显示内容为Network is unreac ...
- Writing Your First Test
Let's say you have an activity layout that represents a welcome screen: <?xml version="1.0&q ...
- MVVM之View和ViewModel的关联
概要: 将所有的VM在加载到Application的Static Resource中,然后在View中用标签指定. 实现: 1)采用特性指定要添加到StaticResource中的对象 public ...
- 10.7 noip模拟试题
楼[问题背景]zhx 为他的妹子造了一幢摩天楼.[问题描述]zhx 有一幢摩天楼. 摩天楼上面有 M 个观光电梯,每个观光电梯被两个整数