笨笨太好玩了,农田荒芜了,彩奖用光了,笨笨只好到处找工作,笨笨找到了一份粉刷匠的工作。笨笨有n条木板需要被粉刷。每条木板被分成m个格子,每个格子要被刷成红色或蓝色。笨笨每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色,已知每个格子最多只能被粉刷一次。

如果笨笨只能粉刷t次,他最多能正确粉刷多少格子。

一个格子如果未被粉刷或被粉刷成错误颜色,就算粉刷错误。

【输入格式】

第一行三个数n,m,t;

接下来n行,每行一个长度为m的字符“0”表示红色,"1"表示蓝色。

【输出格式】

一个整数,最多能正确粉刷的格子数。

Sample input

3 6 3

111111

000000

001100

Sample output

16

100%数据范围满足1≤n,m≤50;0≤t≤2500。

这是bzoj上原题啊……bzoj1296 [SCOI]粉刷匠

就是两个dp

首先,注意到每一行的状态都是和其他行独立的,也就是说,只要你知道了这一行的状态,其他行长什么样无所谓。

所以我们可以先把每一行分开处理

令s[i][j][0/1]表示第i行前j个有多少个0/1。

g[i][j][k]表示第i行前j个涂k次能正确涂色的格子个数。

则g[i][j][k] = max( g[i][j][k] , g[i][L][k-1]+max(s[i][j][0] - s[i][L][0],s[i][j][1] - s[i][L][1]))。

意思是枚举第k-1次涂到L时,在L到j之间涂0或1是否比当前优,效率n^4。我曾经尝试写n^3求第i行涂j次的最优解,可惜貌似不行。

最后发现再令h[i][j]表示第i行涂j次的最优解,f[i][j]表示前i行涂j次的最优解,则f[i][j]=max(f[i][j] , f[i-1][j-k] + h[i][k])。但是边界范围要考虑,可以一整行都不刷。否则在bzoj上能A,但是模拟赛上只有90。

#include<cstdio>
#include<iostream>
using namespace std;
char ch;
int n,m,t;
int h[101][101];
int g[101][101][101];
int s[101][101][2];
int f[101][3001];
bool map[101][101];
int main()
{freopen("draw.in","r",stdin);freopen("draw.out","w",stdout);scanf("%d%d%d",&n,&m,&t);for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){cin>>ch;if (ch=='1') map[i][j]=1;s[i][j][0]=s[i][j-1][0]+(ch=='0');s[i][j][1]=s[i][j-1][1]+(ch=='1');}for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)for (int k=1;k<=m;k++)for (int l=0;l<j;l++)g[i][j][k]=max(g[i][j][k],g[i][l][k-1]+max(s[i][j][0]-s[i][l][0],s[i][j][1]-s[i][l][1]));for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)for (int k=1;k<=m;k++)h[i][j]=max(h[i][j],g[i][k][j]);for (int i=1;i<=n;i++)for (int j=1;j<=t;j++)for (int k=0;k<=j;k++)f[i][j]=max(f[i][j],f[i-1][j-k]+h[i][k]);printf("%d",f[n][t]);
}

转载于:https://www.cnblogs.com/zhber/p/4036067.html

2014.7.8模拟赛【笨笨当粉刷匠】|bzoj1296 [SCOI]粉刷匠相关推荐

  1. 2014.11.12模拟赛【最小公倍数】| vijos1047最小公倍数

    最小公倍数(lcm.c/.cpp/.pas) 题目描述 给定两个正整数,求他们的最小公倍数. 样例输入 28 12 样例输出 84 数据范围 对于40%数据:1<=a,b<=10^9 对于 ...

  2. 2014.9.13模拟赛【数位和乘积】

    数位和乘积(digit.cpp/c/pas) [题目描述] 一个数字的数位和乘积为其各位数字的乘积.求所有的N位数中有多少个数的数位和乘积恰好为K.请注意,这里的N位数是可以有前导零的.比如01,02 ...

  3. 2014.11.12模拟赛【美妙的数字】| vijos1904学姐的幸运数字

    美妙的数字(number.c/.cpp/.pas) 题目描述 黄巨大认为非负整数是美妙的,并且它的数值越小就越美妙.当然0是最美妙的啦. 现在他得到一串非负整数,对于每个数都可以选择先对它做二进制非运 ...

  4. 2014.7.7模拟赛【无线通讯网】

    [题目描述] 国防部计划用无线网络连接若干个边防哨所.2种不同的通讯技术用来搭建无线网络:每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的哨所(两边都 ...

  5. 2014.8.15模拟赛【公主的朋友】

    题意是支持两种操作:区间染色:询问区间[l,r]之间有多少个颜色是x的. wulala的题解是这样写的 30分的话直接暴力, 60分对于每种宗教维护一颗线段树 100分的话分块就可以了,每次暴力处理起 ...

  6. 2014.8.15模拟赛【公主的工作】bzoj1046[HAOI2007]上升序列

    bzoj题目是这样的 Description 对于一个给定的S={a1,a2,a3,-,an},若有P={ax1,ax2,ax3,-,axm},满足(x1 < x2 < - < xm ...

  7. 笨笨工作室告别十月模拟赛

    笨笨工作室告别十月模拟赛 为了大家适应今年复赛电子版题目特意整理了一份电子版题目: /Files/hhdllhflower/笨笨工作室告别十月模拟赛.rar Chess Background 笨笨:& ...

  8. 2014华为编程大赛题目2:笨笨熊搬家打包篇

    注:2014华为编程大赛题目2 下面贴出我的代码,经过多次测试后,无问题, 所以想共享下,也看看大家的思路. 笨笨熊搬家打包篇 描述:森林里的笨笨熊今天可开心啦--他买了新房子,乔迁新禧要搬新家了.因 ...

  9. 洛谷 P1948 [USACO08JAN]电话线Telephone Lines【NOIP模拟笨笨的电话线】

    [二分,spfa chenck] 题目描述 Farmer John wants to set up a telephone line at his farm. Unfortunately, the p ...

  10. 2014华为编程大赛题目:笨笨熊搬家打包篇

    题目:笨笨熊搬家打包篇 森林里的笨笨熊今天可开心啦--他买了新房子,乔迁新喜要搬家了. 因此,笨笨熊请了许多好朋友来帮忙搬家,并准备了很多小纸盒用来装需要搬的物品, 不过,这些纸盒的容积都是相同的,并 ...

最新文章

  1. Python之美[从菜鸟到高手]--一步一步动手给Python写扩展(异常处理和引用计数)
  2. Oracle日志分类
  3. Kalman Filter
  4. go设置后端启动_为什么 Rubyists 应该考虑学习 Go
  5. 支付宝二面微服务、分布式架构?太真实了!
  6. POJ 3621:Sightseeing Cows(最优比率环)
  7. WebStorm介绍
  8. 在Ubuntu中搭建嵌入式Linux开发环境
  9. webgame中常见安全问题、防御方式与挽救措施
  10. html svg折线带圆角,SVG / d3.js上的矩形的一个角的圆角(svg / d3.js rounded corner
  11. 投影坐标系、大地坐标系(地理坐标系)
  12. WIN10系统的Edge浏览器怎么能彻底删除掉
  13. 郑州计算机c语言培训机构,c语言入门学习选郑州哪家计算机专业学校
  14. ArduPilot — ArduPlane架构概述
  15. 2021-2027全球与中国汽车CMOS图像传感器市场现状及未来发展趋势
  16. 制作方舟mod如何连接服务器,方舟服务器怎么添加MOD | 手游网游页游攻略大全
  17. cocos2dx 3.1.1中EaseRateAction动作类的变化
  18. 推荐一个基于 Spring Boot+MyBatis Plus+JWT 的问卷系统!
  19. 图片转换成pdf格式如何转换?
  20. MT6771_MT6762_ISP_Tuning_Introduction

热门文章

  1. smarty php5.5,smarty如何完美兼容php5.5和preg_replace_callback如何替换preg_r
  2. miui11稳定版获取完整root_小米9Pro官方MIUI11开发版推送升级,基于安卓P底层制作-获取ROOT...
  3. Java I/O系统之Print 流
  4. Spring源码之bean的加载(一)
  5. pku2352 Stars(线段树实现)
  6. BD_source code for problem 1555
  7. Pytesseract-windows安装及初步使用
  8. Oracle数据库-建库、建表空间,建用户
  9. 使用对象-关系映射持久化数据
  10. sqlserver2008R2下载安装教程