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
 

Data Constraint

 
 

Hint

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

  这道题很显然是一道动态规划题,但是我们发现,如果我们想用一个动态规划去做这道题,那么状态和转移都会十分的麻烦,这时候我们就要想是否需要两个动态规划来完成一个复杂的过程,我们看到这道题如果只问每一行的最优结果,那么转移就会很简单,所以我们可不可以将这个问题转化成先求每一行粉刷k次的最优解再求前i行操作k次的最优解。

  既然思路确定,那么我们就可以设状态了:1-设置g数组表示在第i行,粉刷j次,刷到k的最优解,2-设置f表示前i行,刷j次的最优解。

  转移方程也很好写:1- g[i][j][k]=max(g[i][j][k],max(用前缀和计算在p到k之间最多可以有多少正确的)+g[i][j-1][p]); p是从j-1开始枚举的,具体为什么代码上有注释,k是从j开始的,因为j进行了j次粉刷后最少粉刷到j点。

  关于f的是 f[i][j]=max(f[i-1][j-k]+g[i][k][m]).

下面上代码:

#include<iostream>
#include<cstdio>
using namespace std;
int f[][],sum[][]; //f表示前i行刷j次最大对值。
int g[][][]; //第i行,刷到第j个用k次粉刷得到的最大对值。
int n,m,t;
char s[];
int main(){
ios::sync_with_stdio();
cin>>n>>m>>t;
for(int i=;i<=n;i++){
cin>>s;
sum[i][]=;
for(int j=;j<=m;j++){
if(s[j-]=='') sum[i][j]=sum[i][j-]+;
else sum[i][j]=sum[i][j-];
}
}
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
for(int k=j;k<=m;k++){
for(int p=j-;p<k;p++){ //因为q是第j-1次粉刷,每一次粉刷至少一格,所以q最少为j-1.
g[i][j][k]=max(g[i][j][k],max(sum[i][k]-sum[i][p],k-p-sum[i][k]+sum[i][p])+g[i][j-][p]);
}
}
}
}
for(int i=;i<=n;i++){
for(int j=;j<=t;j++){
for(int k=;k<=min(j,m);k++){
f[i][j]=max(f[i][j],f[i-][j-k]+g[i][k][m]);
}
}
}
int ans=;
for(int i=;i<=t;i++){
ans=max(ans,f[n][i]);
}
cout<<ans;
}

题解[SCOI2009]粉刷匠 难度:省选/NOI-的更多相关文章

  1. BZOJ 1296: [SCOI2009]粉刷匠 分组DP

    1296: [SCOI2009]粉刷匠 Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上 ...

  2. 【BZOJ1296】[SCOI2009]粉刷匠(动态规划)

    [BZOJ1296][SCOI2009]粉刷匠(动态规划) 题面 BZOJ 洛谷 题解 一眼题吧. 对于每个串做一次\(dp\),求出这个串刷若干次次能够达到的最大值,然后背包合并所有的结果即可. # ...

  3. 【BZOJ1296】[SCOI2009]粉刷匠 (DP+背包)

    [SCOI2009]粉刷匠 题目描述 \(windy\)有 \(N\) 条木板需要被粉刷. 每条木板被分为 \(M\) 个格子. 每个格子要被刷成红色或蓝色. \(windy\)每次粉刷,只能选择一条 ...

  4. bzoj1296: [SCOI2009]粉刷匠(DP)

    1296: [SCOI2009]粉刷匠 题目:传送门 题解: DP新姿势:dp套dp 我们先单独处理每个串,然后再放到全局更新: f[i][k]表示当前串枚举到第i个位置,用了k次机会 F[i][j] ...

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

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

  6. 1296: [SCOI2009]粉刷匠[多重dp]

    1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1919  Solved: 1099[Submit][Statu ...

  7. 背包 DP【洛谷P4158】 [SCOI2009]粉刷匠

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

  8. BZOJ_1296_[SCOI2009]粉刷匠_DP

    BZOJ_1296_[SCOI2009]粉刷匠_DP Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能 ...

  9. [Bzoj1296][Scoi2009] 粉刷匠 [DP + 分组背包]

    1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2184  Solved: 1259[Submit][Statu ...

随机推荐

  1. Spring事务管理之几种方式实现事务(转)

    一:事务认识 大家所了解的事务Transaction,它是一些列严密操作动作,要么都操作完成,要么都回滚撤销.Spring事务管理基于底层数据库本身的事务处理机制.数据库事务的基础,是掌握Spring ...

  2. 洛咕 【P1891】疯狂LCM & 三倍经验

    经验给掉先: 经验*1 经验*2 经验*3 这里给个跑得比较慢的 \(n \sqrt n\) 预处理然后 \(O(1)\) 回答询问的做法 式子 首先我们推柿子: \[\begin{aligned}A ...

  3. vue.js(18)--父组件向子组件传值

    子组件是不能直接使用父组件中数据的,需要进行属性绑定(v-bind:自定义属性名=“msg”),绑定后需要在子组件中使用props[‘自定义属性名’]数组来定义父组件的自定义名称. props数组中的 ...

  4. 在虚拟机Linux中安装VMTools遇到的问题-小结

    总结: 遇到的问题:No support for locale: zh_CN.utf8 可能的解决方法:1.sudo dpkg-reconfigure locale (重新配置?) 2.上一步失败,提 ...

  5. 1-基于Xilinx XCKU115的半高PCIe x8 硬件加速卡

    基于Xilinx XCKU115的半高PCIe x8 硬件加速卡 一.概述 本板卡系我公司自主研发,采用Xilinx公司的XCKU115-3-FLVF1924-E芯片作为主处理器,主要用于FPGA硬件 ...

  6. unittest单元测试框架总结(转)

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

  7. HDU-3810 超大容量01背包

    题意:有n堆野兽,每堆野兽屠杀完完需要花费ti时间,可以增加金钱gi,敌法师有瞬移技能,可以从某堆野兽移到另一堆野兽,题目有给定从哪堆可以移到哪堆.最后问在满足打的金钱多余m的情况下的最少时间.数据范 ...

  8. kubernetes之二 使用minikube创建单节点k8s本地集群

    使用Minikube来运行kubernetes集群是最简单.快捷的途径.Minikube是一个构建单节点集群的工具,对于测试Kubernetes和本地开发应用都非常有用.官方安装minikube教程请 ...

  9. tpcc-mysql测试mysql5.6 (xfs文件系统)

    操作系统版本:CentOS release 6.5 (Final)  2.6.32-431.el6.x86_64 #1 内存:32G CPU:Intel(R) Xeon(R) CPU E5-2450 ...

  10. Robomongo可视化命令

    ## 更新命令示例 db.getCollection('collection_name').update(    {'_id':ObjectId('id string')},     {$set:{' ...