1296: [SCOI2009]粉刷匠


Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2184  Solved: 1259
[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



Sample Output



HINT


30%的数据,满足 1 <= N,M <= 10 ; 0 <= T <= 100 。 100%的数据,满足 1 <= N,M <= 50 ; 0 <= T <= 2500 。

 

分析:


 对于每一块版子粉刷时是互不相干的,所以每一块是单独求的。
  先n^4处理出每一块版子的dp数组,dp[q][i][x]表示第q块版子,前x个位置粉刷i次的最大值。
  因为每一块版子单独处理,可以省掉一维变成dp[i][x]
  转移方程为:    dp[i][x] = max(dp[i][x],dp[i - 1][y] + max(blue[q][x] - blue[q][y],red[q][x] - red[q][y]));
  然后做分组背包 处理f[i][j],表示前i块版子,粉刷j次的最大值
  转移方程为:     f[q][i] = max(f[q][i],f[q - 1][i - j] + dp[j][m]);
  求出f[n][i]中最大值即为答案;
 

贴上AC代码:


# include <iostream>
# include <cstdio>
# include <cstring>
using namespace std;
char str[][];
int dp[][];
int blue[][],red[][];
int f[][];
int n,m,t;
int main(){
scanf("%d %d %d",&n,&m,&t);
for(int i = ;i <= n;i++){
scanf("%s",&str[i][]);
}
for(int i = ;i <= n;i++){
for(int j = ;j <= m;j++){
blue[i][j] = blue[i][j - ];
red[i][j] = red[i][j - ];
if(str[i][j] == '')blue[i][j]++;
else red[i][j]++;
}
}
for(int q = ; q <= n;q++){
memset(dp,,sizeof dp);
for(int i = ;i <= min(t,m);i++){
for(int x = ;x <= m;x++){
for(int y = ;y < x;y++){
dp[i][x] = max(dp[i][x],dp[i - ][y] + max(blue[q][x] - blue[q][y],red[q][x] - red[q][y]));
}
}
}
for(int i = ;i <= t;i++){
for(int j = ;j <= min(i,m);j++){
f[q][i] = max(f[q][i],f[q - ][i - j] + dp[j][m]);
}
}
}
int ans = ;
for(int i = ;i <= t;i++)ans = max(ans,f[n][i]);
printf("%d\n",ans);
return ;
}

最新文章

  1. 使用 jsoup 对 HTML 文档进行解析和操作
  2. 【bzoj1601】[Usaco2008 Oct]灌水(MST)
  3. C# 加密算法
  4. CSS3之创建透明边框三角
  5. 删除顺序链表中重复的数 (一) leecode
  6. Unity3D 3D横版跑酷
  7. 【转】Memcached管理与监控工具----MemAdmin
  8. jQuery工具函数下
  9. HTML5新元素
  10. mac的svn之cornerstone简易教程
  11. BZOJ 1047: [HAOI2007]理想的正方形( 单调队列 )
  12. MySQL密码过期策略
  13. Unity加载场景、计时器、加载时不销毁某物体
  14. python全栈学习--day11(函数高级应用)
  15. 「CF1154F」Shovels Shop【背包DP】
  16. querySelectorAll选择器的js实现
  17. 【洛谷P2860】冗余路径
  18. CountDownLatch的和CyclicBarrier使用
  19. Ubuntu 14.04 LTS 配置 Juno 版 Keystone
  20. windows下dump文件调试

热门文章

  1. JavaScript-条件循环
  2. find、filter、map的区别
  3. springmvc请求方法那些事
  4. adb 调试真机 wait for device 错误解决办法
  5. mysql在线开启或禁用GTID模式
  6. 使用github中py12306抢票系得
  7. Wall Treatment
  8. UVA - 10410 Tree Reconstruction (根据dfs序和bfs序恢复一颗树)
  9. mysql 常用命令(一)
  10. centos挂载本地镜像作为yum源