博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codevs 1744 格子染色==BZOJ 1296 粉刷匠
阅读量:6832 次
发布时间:2019-06-26

本文共 1968 字,大约阅读时间需要 6 分钟。

1744 格子染色

 

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 钻石 Diamond
 查看运行结果
 
 
题目描述 
Description

有 n 条木板需要被粉刷。 每条木板被分为 m 个格子。 每个格子要被刷成红

色或蓝色。

输入描述 
Input Description

Dizzy 每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个

格子最多只能被粉刷一次。 如果 Dizzy 只能粉刷 t 次,他最多能正确粉刷多少格
子? 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。

输出描述 
Output Description

第一行包含三个整数,n m t。 接下来有n行,每行一个长度为m的字符串,'0'表

示红色,'1'表示蓝色。

样例输入 
Sample Input

3 6 3

111111
000000
001100

样例输出 
Sample Output

16

数据范围及提示 
Data Size & Hint

1 ≤ n,m ≤ 50 ; 0 ≤ t ≤ 2500 。

分类标签 Tags 

 
 
题解:

稍微复杂一点的划分dp

设f[i][j][k]为第i行前j个k次粉刷正确的最大值

由于每行循环使用,可以去掉第一维,但每次不要忘了清零(WA了好久)

f[j][k]=max{ f[u][j-1] + max(u+1到j的蓝色的个数,u+1到j的红颜色的个数) }

 

设h[i][k]为第i行分成k份的最大值

h[i][k]=f[i][m][k]

 

设dp[i][k]为前i行总共分成k份的最大值

dp[i][k]=dp[i-1][t-x]+h[i][x]

x表示在第i行使用x次

AC代码:

 

#include
#include
using namespace std;#define N 51#define M 2501int n,m,t,s1[N][N],s2[N][N],f[N][N],h[N][N],dp[N][M];char str[N];inline int sum1(int i,int l,int r){ return s1[i][r]-s1[i][l-1];}inline int sum2(int i,int l,int r){ return s2[i][r]-s2[i][l-1];}int main(){ scanf("%d%d%d",&n,&m,&t); for(int i=1;i<=n;i++){ scanf("%s",str+1); for(int j=1;j<=m;j++){ s1[i][j]=s1[i][j-1]; s2[i][j]=s2[i][j-1]; str[j]=='1'?s1[i][j]++:s2[i][j]++; } } for(int i=1;i<=n;i++){
//行 for(int j=1;j<=m;j++){
//前j个数 for(int k=1;k<=min(t,j);k++){
//分成k份 f[j][k]=0;//注意f是每行重复使用的,需要清零! for(int u=k-1;u<=j-1;u++){
//分割点 f[j][k]=max(f[j][k],f[u][k-1]+max(sum1(i,u+1,j),sum2(i,u+1,j))); } } } for(int k=1;k<=min(t,m);k++){ h[i][k]=f[m][k]; } } for(int i=1;i<=n;i++){ for(int k=1;k<=t;k++){ for(int x=0;x<=k;x++){ dp[i][k]=max(dp[i][k],dp[i-1][k-x]+h[i][x]); } } } printf("%d",dp[n][t]); return 0;}

 

 

 

转载于:https://www.cnblogs.com/shenben/p/5822804.html

你可能感兴趣的文章
shell code one
查看>>
适配手机端浏览器
查看>>
面向对象
查看>>
[LeetCode] 526. Beautiful Arrangement
查看>>
获取本机IP,用户代理
查看>>
apple watch 与 iphone 之间的通信方式
查看>>
Ubantu 查看系统资源占用
查看>>
Oracle EBS在编码方式为AL32UTF8时的注意事项
查看>>
linux那些事
查看>>
通信服务器的架构问题
查看>>
所见即所得的游戏界面开发
查看>>
python 学习笔记 五
查看>>
Qt 乱码
查看>>
SpringMVC由浅入深day01_7入门程序小结
查看>>
three.js
查看>>
一个简单的统计图像主颜色的算法(C#源代码)
查看>>
java开发中的重中之重-------mysql(基础篇)
查看>>
While 나가는 법
查看>>
c语言操作符的优先级
查看>>
Codeforces Round #420 (Div. 2) A-E
查看>>