刚开始往网络流的方向想。建不出图。。。

因为每次只能对一行进行染色。每一行都是独立的。

对于每一行,因为格子只能染一次,所以可以发现这是一个多阶段决策问题,这个决策就是当前格子染0还是染1.

令dp[i][j][k](k==0||k==1)表示当前行第i个格子用了j次染色,且这次染色染为k色 的最多有效格子。

这样我们用了O(n*m*m)得出了每一行用了v次染色获得的最多有效格子val。

显然的分组背包。每一个组最多选一种。再用O(V*n*m)求一遍分组背包即可。

总复杂度O((V+m)*m*n).

# include <cstdio>
# include <cstring>
# include <cstdlib>
# include <iostream>
# include <vector>
# include <queue>
# include <stack>
# include <map>
# include <set>
# include <cmath>
# include <algorithm>
using namespace std;
# define lowbit(x) ((x)&(-x))
# define pi 3.1415926535
# define eps 1e-9
# define MOD 100000007
# define INF 1000000000
# define mem(a,b) memset(a,b,sizeof(a))
# define FOR(i,a,n) for(int i=a; i<=n; ++i)
# define FO(i,a,n) for(int i=a; i<n; ++i)
# define bug puts("H");
# define lch p<<1,l,mid
# define rch p<<1|1,mid+1,r
# define mp make_pair
# define pb push_back
typedef pair<int,int> PII;
typedef vector<int> VI;
# pragma comment(linker, "/STACK:1024000000,1024000000")
typedef long long LL;
int Scan() {int res=0, flag=0;char ch;if((ch=getchar())=='-') flag=1;else if(ch>='0'&&ch<='9') res=ch-'0';while((ch=getchar())>='0'&&ch<='9')  res=res*10+(ch-'0');return flag?-res:res;
}
void Out(int a) {if(a<0) {putchar('-'); a=-a;}if(a>=10) Out(a/10);putchar(a%10+'0');
}
const int N=2505;
//Code begin...int val[55][55], dp[55][55][2], ans[2505];
char s[55][55];int main ()
{int n, m, T;scanf("%d%d%d",&n,&m,&T);FOR(i,1,n) scanf("%s",s[i]+1);FOR(i,1,n) {mem(dp,0);FOR(j,1,m) FOR(k,1,j) {dp[j][k][0]=max(dp[j-1][k][0],max(dp[j-1][k-1][0],dp[j-1][k-1][1]))+(s[i][j]=='0');dp[j][k][1]=max(dp[j-1][k][1],max(dp[j-1][k-1][0],dp[j-1][k-1][1]))+(s[i][j]=='1');}FOR(j,1,m) val[i][j]=max(dp[m][j][0],dp[m][j][1]);}FOR(i,1,n) for (int j=T; j>=0; --j) for (int k=min(j,m); k>=1; --k)ans[j]=max(ans[j],ans[j-k]+val[i][k]);printf("%d\n",ans[T]);return 0;
}

View Code

转载于:https://www.cnblogs.com/lishiyao/p/6550684.html

BZOJ 1296 粉刷匠(分组背包套DP)相关推荐

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

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

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

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

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

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

  4. [SCOI2009]粉刷匠 DP)

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

  5. 小小粉刷匠 牛客(区间dp)

    链接:https://ac.nowcoder.com/acm/problem/16129 来源:牛客网 题目描述 "lalala,我是一个快乐的粉刷匠",小名一边快活地唱着歌,一边 ...

  6. 小小粉刷匠(区间 dp)

    小小粉刷匠 题目描述 "lalala,我是一个快乐的粉刷匠",小名一边快活地唱着歌,一边开心地刷着墙",兴致突然被打断,"小名,你今天如果刷不完这一栋楼的墙,那 ...

  7. P4158 [SCOI2009]粉刷匠(dp)

    P4158 [SCOI2009]粉刷匠(dp) 考虑每行独立计算. 所以可以开一个三维数组:g[i][j][k]g[i][j][k]g[i][j][k]第iii行前jjj列涂了kkk次的最大值. 然后 ...

  8. 【题解】P4158 [SCOI2009]粉刷匠(DP,背包)

    [题解]P4158 [SCOI2009]粉刷匠 是一道资源规划 DP 的好题,但是我想了很久还去看了题解./kk我真菜. 题目链接 P4158 [SCOI2009]粉刷匠 - 洛谷 题意概述 发现自己 ...

  9. BZOJ1296:[SCOI2009]粉刷匠

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

最新文章

  1. 菜鸟教程 之 shell 脚本学习笔记 (一)
  2. 企业信息门户与办公自动化的集成应用
  3. 【分享】LazyLoad延迟加载(按需加载)
  4. python串口通讯数据过长_Python 串口通讯
  5. matlab入门4-mdlInitializeSizes解析
  6. python 选择文件对话框插件_[ PyQt入门教程 ] PyQt5基本控件使用:消息弹出、用户输入、文件/目录选择对话框...
  7. PostgreSQL的使用-02-在Linux下的基本配置
  8. python移动文件中某个内容_如何在Python中移动文件
  9. 从 JMM 透析 volatile 与 synchronized 原理
  10. 1 分钟抗住 10 亿请求!某些 App 是怎么做到的? | 原力计划
  11. java map传入参数_JAVA中map中参数的添加修改
  12. catch里面不想做任何处理_处理异常的三种健壮方式
  13. Linux系统下i350网卡固件更新说明
  14. 路由入口与vue布局入口
  15. dumple什么意思_dump是什么意思
  16. glib linux,[转载]linux下glib.h的介绍
  17. 2019CVPR单目深度估计综述
  18. 文件上传漏洞的小总结
  19. 双重检查锁与单例模式
  20. 利用电脑投放手机声音且可不冲突同时播放电脑声音的方法

热门文章

  1. 二分查找之搜索插入位置
  2. 问题解决: SSR 的 1080 端口被占用
  3. Mysql8.0之后没有缓存功能
  4. List<Object> 转List<String>
  5. 问:一行Python代码到底能干多少事情?(三)
  6. 1028 List Sorting
  7. 群晖 设置 php 服务器,群晖NAS服务器iSCSI管理器配置连接及使用说明
  8. 农民斗地主——Binder fuzz安全研究
  9. php接口返回错误码,laravel 错误处理,接口错误返回json代码
  10. mysql 常用配置_mysql 常用配置