BZOJ1296[SCOI2009] 粉刷匠
原题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1296
粉刷匠
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 。
题解
因为涂色是一行一行涂的,所以每行之间的涂色是互不干扰的,可以一行一行分别处理。
先用dye[i][j]dye[i][j]dye[i][j]表示前iii个格子涂j" role="presentation" style="position: relative;">jjj次能得到的最大收益,转移时只需要枚举中间点两种颜色分类讨论进行转移。
剩下的部分就类似于分组背包了,每一行都只能选择dye[n][j]dye[n][j]dye[n][j]中的一个,体积为jjj,价值为dye[n][j]" role="presentation" style="position: relative;">dye[n][j]dye[n][j]dye[n][j]中的值,简单的dpdpdp一下即可。
代码
#include<bits/stdc++.h>
using namespace std;
const int M=55;
int dye[M][M],dp[M][M*M],sum[M],n,m,t,ans;
char ch[M];
void in(){scanf("%d%d%d",&n,&m,&t);}
void ac()
{for(int i=1,j,k,l,mx;i<=n;++i){scanf("%s",ch+1);memset(dye,0,sizeof(dye));for(j=1;j<=m;++j)sum[j]=sum[j-1]+(ch[j]=='1');for(j=1;j<=m;++j)for(k=1;k<=m;++k)for(l=0;l<j;++l)dye[j][k]=max(dye[j][k],dye[l][k-1]+max(sum[j]-sum[l],j-l-sum[j]+sum[l]));for(j=1;j<=t;++j)for(k=1;k<=min(j,m);++k)dp[i][j]=max(dp[i][j],dp[i-1][j-k]+dye[m][k]);}for(int i=1;i<=t;++i)ans=max(ans,dp[n][i]);printf("%d",ans);
}
int main(){in();ac();}
BZOJ1296[SCOI2009] 粉刷匠相关推荐
- BZOJ1296:[SCOI2009]粉刷匠
1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2038 Solved: 1182 [Submit][Sta ...
- bzoj1296 [SCOI2009]粉刷匠
题目链接:bzoj1296 题目大意: windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上 ...
- bzoj1296 [SCOI2009]粉刷匠 区间dp+背包
每一条都是独立的,所以可以分开处理 对于一条,粉刷一定是粉刷完完整的一条是最优的(不会有比它优的),所以枚举次数起点转移 不同条之间就是分组背包的关系了.. 码: #include<iostre ...
- BZOJ1296(SCOI2009)[粉刷匠]--背包+DP
[链接] bzoj1296 [解题报告] 很容易想到背包定义g[i][j]g[i][j]表示目前推了ii行,共刷了jj次. 然后我们再对每一行进行考虑. 定义f[i][j]f[i][j]表示目前推到第 ...
- [BZOJ1296][SCOI2009]粉刷匠
原题地址 刷水- 数组开小了一次,呵呵- #include <cstdio> #include <algorithm> using namespace std; const i ...
- BZOJ 1296: [SCOI2009]粉刷匠( dp )
dp[ i ][ j ] = max( dp[ i - 1 ][ k ] + w[ i ][ j - k ] ) ( 0 <= k <= j ) 表示前 i 行用了 j 次粉刷的机会能正 ...
- bzoj 1296: [SCOI2009]粉刷匠(DP+DP)
1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2339 Solved: 1348 [Submit][Sta ...
- [SCOI2009]粉刷匠 DP)
[SCOI2009]粉刷匠 题目描述: windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上 ...
- [洛谷P4158][SCOI2009]粉刷匠(动态规划)
[洛谷P4158][SCOI2009]粉刷匠(动态规划) 题目描述 输入描述 输出描述 示例 输入 输出 题目思路 代码 欢迎关注微信公众号:Java后台开发 题目描述 windy有 N 条木板需要被 ...
- [SCOI2009]粉刷匠 牛客DP入门
0x00 题目来源 [SCOI2009]粉刷匠 0x10 Tag 线性DP.区间DP 0x20 题目描述 windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色'0' ...
最新文章
- Docker - 在CentOS7.5中升级Docker版本
- boost::hana::remove用法的测试程序
- FPGA实现OV5640摄像头及RGB图像数据采集
- 那朵美丽的格桑花,你是否依然绽放?
- mysql查询和缓存原理
- java 顺序输出_java输出顺序
- 小型金融知识图谱构流程示范
- Tomcat基础教程(三)
- 全链路跟踪对比,skywalking、zipkin等
- php tp框架教程,从零开始了解thinkphp框架,tp框架基础教程
- X509Certificate证书如何获取16位长度serial number?
- Word文档字间距怎么调?
- MMCM时钟动态调相
- winform程序内存不足或假死的问题
- kylin在hadoop 中的架构图_Kylin |1.麒麟架构及原理
- Webstorm2018激活和汉化
- VS2013未能正确加载microsoft.visualstudio.editor.implementation.editorpackage
- java 经纬度 电子围栏_电子围栏判断 java 版本
- 通过ssh连接aws(亚马逊 云服务器 实例)
- xlrd python读取excel 编码错误_python读取excel数据报xlrd.biffh.XLRDError错误原因