1744 格子染色

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 钻石 Diamond
 查看运行结果
 
 
题目描述 Description

有 n 条木板需要被粉刷。 每条木板被分为 m 个格子。 每个格子要被刷成红
色或蓝色。

输入描述 Input Description

Dizzy 每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个
格子最多只能被粉刷一次。 如果 Dizzy 只能粉刷 t 次,他最多能正确粉刷多少格
子? 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。

输出描述 Output Description

第一行包含三个整数,n m t。 接下来有n行,每行一个长度为m的字符串,'0'表
示红色,'1'表示蓝色。

样例输入 Sample Input

3 6 3
111111
000000
001100

样例输出 Sample Output

16

数据范围及提示 Data Size & Hint

1 ≤ n,m ≤ 50 ; 0 ≤ t ≤ 2500 。

分类标签 Tags 点此展开

 
 
题解:

稍微复杂一点的划分dp

设f[i][j][k]为第i行前j个k次粉刷正确的最大值

由于每行循环使用,可以去掉第一维,但每次不要忘了清零(WA了好久)

f[j][k]=max{ f[u][j-1] + max(u+1到j的蓝色的个数,u+1到j的红颜色的个数) }

设h[i][k]为第i行分成k份的最大值

h[i][k]=f[i][m][k]

设dp[i][k]为前i行总共分成k份的最大值

dp[i][k]=dp[i-1][t-x]+h[i][x]

x表示在第i行使用x次

AC代码:

#include<cstdio>
#include<algorithm>
using namespace std;
#define N 51
#define M 2501
int n,m,t,s1[N][N],s2[N][N],f[N][N],h[N][N],dp[N][M];
char str[N];
inline int sum1(int i,int l,int r){
return s1[i][r]-s1[i][l-];
}
inline int sum2(int i,int l,int r){
return s2[i][r]-s2[i][l-];
}
int main(){
scanf("%d%d%d",&n,&m,&t);
for(int i=;i<=n;i++){
scanf("%s",str+);
for(int j=;j<=m;j++){
s1[i][j]=s1[i][j-];
s2[i][j]=s2[i][j-];
str[j]==''?s1[i][j]++:s2[i][j]++;
}
}
for(int i=;i<=n;i++){//行
for(int j=;j<=m;j++){//前j个数
for(int k=;k<=min(t,j);k++){//分成k份
f[j][k]=;//注意f是每行重复使用的,需要清零!
for(int u=k-;u<=j-;u++){//分割点
f[j][k]=max(f[j][k],f[u][k-]+max(sum1(i,u+,j),sum2(i,u+,j)));
}
}
}
for(int k=;k<=min(t,m);k++){
h[i][k]=f[m][k];
}
}
for(int i=;i<=n;i++){
for(int k=;k<=t;k++){
for(int x=;x<=k;x++){
dp[i][k]=max(dp[i][k],dp[i-][k-x]+h[i][x]);
}
}
}
printf("%d",dp[n][t]);
return ;
}

最新文章

  1. comboBox 手动输入后回车自动更新数据
  2. 特征处理(Feature Processing)
  3. Mac中使用port升级gcc版本
  4. Eclipse中使用tomcat 8服务器初级教程
  5. 边工作边刷题:70天一遍leetcode: day 84-1
  6. IIS WMI Provider
  7. Linux内核--网络栈实现分析(二)--数据包的传递过程--转
  8. C和BlockCode
  9. Hibernate 配置详解(12) 其实我也不想用这么土的名字
  10. Python的Tkinter将窗口置顶
  11. 【汇编语言】新手第一步——HelloWorld &amp; A+B
  12. 多线程随笔一(AutoResetEvent和ManulResetEvent)
  13. CloseableHttpClient获取https请求不验证证书
  14. 在Eclipse中Tomcat配置图片保存路径
  15. nginx学习笔记(一)
  16. python模块--re模块
  17. 一句命令修复Xcode6.2插件失效的问题
  18. qt5 移植 交叉编译出现错误
  19. 设计模式之抽象工厂模式(Java实现)
  20. Oracle 通过dblink和job方式实现两个数据库表之间数据同步

热门文章

  1. SQL Server 兼容级别
  2. ajax中的json和jsonp详解
  3. libuv httpparser写的简单http server
  4. Linux思维导图之网络管理
  5. hdu4428(Coder)线段树
  6. 十款开发者常用的Chrome插件,让chrome成为开发利器!
  7. C语言学习3
  8. 【01】emmet系列之基础介绍
  9. js Date()日期函数浏览器兼容问题解决方法
  10. [bzoj2982]combination_卢卡斯