1296: [SCOI2009]粉刷匠

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

HINT

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

嗯哼

思路{

  考虑对每个串进行一下序列划分型DP,求出每个串刷i次的最优结果。

  那我就相当于对这n个串做分组背包了。时间复杂度O(n^4).

}

#include<bits/stdc++.h>
#define RG register
#define il inline
#define N 2510
#define M 60
#define LL long long
using namespace std;
int dp[M][N],sum1[M],sum2[M],n,m,T;
char s[M];int DP[M][N];
int main(){freopen("paint.in","r",stdin);freopen("paint.out","w",stdout);scanf("%d%d%d",&n,&m,&T);for(int k=1;k<=n;++k){//Nscanf("%s",s+1);memset(dp,0,sizeof(dp));for(int i=1;i<=m;++i)sum1[i]=sum1[i-1]+(s[i]=='1'),sum2[i]=sum2[i-1]+(s[i]=='0');memset(dp,0,sizeof(dp));dp[1][1]=1;for(int i=2;i<=m;++i){for(int j=1;j<=m;++j)for(int i1=0;i1<i;++i1){dp[i][j]=max(dp[i1][j-1]+max(sum2[i]-sum2[i1],sum1[i]-sum1[i1]),dp[i][j]);}}for(int i=1;i<=T;++i){int tmp=min(i,m);for(int j=0;j<=tmp;++j)DP[k][i]=max(DP[k][i],DP[k-1][i-j]+dp[m][j]);}}int Ans=0;for(int i=1;i<=T;++i)Ans=max(Ans,DP[n][i]);cout<<Ans;return 0;
}

转载于:https://www.cnblogs.com/zzmmm/p/7361328.html

BZOJ1296:[SCOI2009]粉刷匠相关推荐

  1. bzoj1296 [SCOI2009]粉刷匠

    题目链接:bzoj1296 题目大意: windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上 ...

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

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

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

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

  4. [BZOJ1296][SCOI2009]粉刷匠

    原题地址 刷水- 数组开小了一次,呵呵- #include <cstdio> #include <algorithm> using namespace std; const i ...

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

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

  6. bzoj 1296: [SCOI2009]粉刷匠(DP+DP)

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

  7. [SCOI2009]粉刷匠 DP)

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

  8. [洛谷P4158][SCOI2009]粉刷匠(动态规划)

    [洛谷P4158][SCOI2009]粉刷匠(动态规划) 题目描述 输入描述 输出描述 示例 输入 输出 题目思路 代码 欢迎关注微信公众号:Java后台开发 题目描述 windy有 N 条木板需要被 ...

  9. [SCOI2009]粉刷匠 牛客DP入门

    0x00 题目来源 [SCOI2009]粉刷匠 0x10 Tag 线性DP.区间DP 0x20 题目描述 windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色'0' ...

最新文章

  1. Digit Sum II( ABC044ARC060)
  2. js调试工具console详解
  3. 深入浅出谈cuda 书_入门和基础——9本关于美学的书
  4. 【Angular】启动过程
  5. 判断任意控制台输入的十进制数是否为水仙花数
  6. 单例模式——Java
  7. 大数据之Spark教程
  8. Android 应用性能优化(2)---优化Android 应用启动速度
  9. iFrame只要竖滚动条,不要横滚动条
  10. 高等数学复习笔记(二)- 一元函数微分学的概念、计算以及几何应用
  11. PCB设计的工艺流程
  12. Java 开发之微信(支付宝)扫码支付的小总结
  13. 脱硫塔发生堵塞,会产生什么影响?怎么应对?基于钙法、镁法、双碱法、氨法脱硫技术比较分析
  14. python饼状图显示其比例_python 饼状图
  15. Python基础学习之正则表达式(完整版)
  16. 【签约】ManageEngine卓豪签约中国大饭店 | 智能解析日志、洞察威胁,提升数据安全合规性
  17. 论文阅读【域泛化】:ECCV2018|Two at Once: Enhancing Learning and Generalization Capacities via IBN-Net
  18. 【Rust精彩blog】Rust 中几个智能指针的异同与使用场景
  19. 对外汉语偏误语料库_对外汉语偏误
  20. 怎么桌面给计算机设密码,怎么设置电脑桌面密码

热门文章

  1. 今天介绍一款强大的服务器开发工具(JRebel)
  2. ELK日志服务使用-kafka传输日志(bbotte.com)
  3. linux下好用的软件
  4. QL Server 中四种匹配符的含义
  5. 很牛逼的短链接,我们一起来晒晒短链接程序(转)
  6. Cassandra学习手册之一:Cassandra介绍
  7. 剑破冰山—Oracle开发艺术 前言
  8. 用两张图告诉你,为什么你的App会卡顿?
  9. Laravel Ioc容器singleton和bind方法的区别
  10. 证明并推导汉诺塔(河内之塔)问题公式