1296: [SCOI2009]粉刷匠

Time Limit: 10 Sec  Memory Limit: 162 MB

Submit: 1479  Solved: 837

[

id=1296" style="color:blue; text-decoration:none">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 。

Source

这道题做法是两次DP。

能够发现不同的木板是相互独立,互相无影响的。

所以我们能够O(n^3)暴力DP计算出每一条木板,粉刷j次最多能正确粉刷的数量。

然后对于不同的木板再用一次DP计算答案。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
using namespace std;
int n,m,t,ans=0;
int sum[55],f[55][55],g[55][2505];
char s[55];
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int main()
{
n=read();m=read();t=read();
F(i,1,n)
{
scanf("%s",s+1);
F(j,1,m) sum[j]=sum[j-1]+(s[j]=='1');
F(k,1,m) F(j,1,m)
{
f[j][k]=0;
F(l,0,j-1)
{
int tmp=sum[j]-sum[l];
f[j][k]=max(f[j][k],f[l][k-1]+max(tmp,j-l-tmp));
}
}
F(j,1,t) F(k,1,min(j,m)) g[i][j]=max(g[i][j],g[i-1][j-k]+f[m][k]);
}
F(i,1,t) ans=max(ans,g[n][i]);
printf("%d\n",ans);
return 0;
}

bzoj1296【SCOI2009】粉刷匠的更多相关文章

  1. [Bzoj1296][Scoi2009] 粉刷匠 [DP + 分组背包]

    1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2184  Solved: 1259[Submit][Statu ...

  2. bzoj1296: [SCOI2009]粉刷匠(DP)

    1296: [SCOI2009]粉刷匠 题目:传送门 题解: DP新姿势:dp套dp 我们先单独处理每个串,然后再放到全局更新: f[i][k]表示当前串枚举到第i个位置,用了k次机会 F[i][j] ...

  3. BZOJ1296 [SCOI2009]粉刷匠 动态规划 分组背包

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1296 题意概括 有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝 ...

  4. 【Dp】Bzoj1296 [SCOI2009] 粉刷匠

    Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个 ...

  5. BZOJ1296: [SCOI2009]粉刷匠 DP

    Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个 ...

  6. 2018.09.02 bzoj1296: [SCOI2009]粉刷匠(dp套dp)

    传送门 dp好题. 先推出对于每一行花费k次能最多粉刷的格子数. 然后再推前i行花费k次能最多粉刷的格子数. 代码: #include<bits/stdc++.h> #define N 5 ...

  7. BZOJ1296 [SCOI2009]粉刷匠 【dp】

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

  8. [bzoj1296][SCOI2009]粉刷匠(泛化背包)

    http://www.lydsy.com:808/JudgeOnline/problem.php?id=1296 分析: 首先预处理出每一行的g[0..T]表示这一行刷0..T次,最多得到的正确格子数 ...

  9. bzoj1296: [SCOI2009]粉刷匠

    dp. 用到俩次dp,用1和0代表俩种颜色,首先对于每块木板我们进行一次dp,g[i][j]代表前j个格子刷i次最多能涂到几个格子. 则 g[i][j]=max(g[i-1][k],max(cnt[j ...

  10. bzoj1296 [SCOI2009]粉刷匠——背包

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1296 对于不同木板之间,最终统计答案时做一个分组背包即可: 而要进行分组背包,就需要知道每个 ...

随机推荐

  1. 【xshell】xshell设置快捷键 设置Ctrl+C Ctrl+V快捷键为复制粘贴

    在使用xshell的时候,总是不能顺手的进行复制粘贴的操作. 那能不能设置xhsell的快捷键呢? 点击工具--->选项---> 选择 键盘和鼠标 选项卡--->点击编辑----&g ...

  2. java int类型转换成String , 不足10位 在前面补0

    String.format("%010d", 25); 0代表前面要补的字符 10代表字符串长度 d表示参数为整数类型 String s = "Hello World!& ...

  3. Word 页眉插入自动标题(页眉显示章节标题)

    做word文档时有时候需要将章节标题加到页眉中,这里实现自动获取和自动更新页眉里面的标题 1.双击页眉,输入固定文字作为页眉左边的显示,然后敲2下table键,为接下来插入自动标题做好准备,如下图: ...

  4. flask_wtf/wtforms几个坑点,先简单记此

    1.@pluginquery.route('/app_include_plugins', methods=['GET','POST']) methods必须填写 2.plu_incl_app = St ...

  5. 24.Semaphore

    Semaphore     在进程方面完成信号线的控制,可以控制某个资源下,可被同时访问的线程个数.对系统的访问量进行评估,信号量维护了一个许可集:在许可前会阻塞每一个 semaphore.acqui ...

  6. 数据库实例: STOREBOOK > 表空间 > 编辑 表空间: SYSTEM

    ylbtech-Oracle:数据库实例: STOREBOOK  >  表空间  >  编辑 表空间: SYSTEM  表空间  >  编辑 表空间: SYSTEM 1. 一般信息返 ...

  7. Surrounded Regions leetcode java

    题目: Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is capt ...

  8. 同时启动多个Tomcat服务器

    以下步骤能够同时启动两个tomcat:1.特别要注意:不要设置CATALINA_HOME 2.分别修改安装目录下的conf子目录中的server.xml文件: a.修改http访问端口(默认为8080 ...

  9. 无法执行 varchar 值到 varchar 的隐式转换,原因是,由于排序规则冲突,该值的排序规则未经解析。

    SELECT CONVERT(VARCHAR(100), 列名) FROM Table 提示错误: 无法执行 varchar 值到 varchar 的隐式转换,原因是,由于排序规则冲突,该值的排序规则 ...

  10. JavaScript数组与字符串常用方法总结

    先来一段代码引子: var str='hello world'; alert(str.charAt());//通过下标查找值: alert(str.indexOf());//通过值查找字符串下标:没有 ...