<SCOI2009>粉刷匠の思路
emm.dp真的是写不来啊难过
不边写边注释我就挂了
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int f[][],g[][],c[]/*为第n行需要改变的次数就是颜色变了的次数*/,dp[],crt[][];
int n,m,t;
int main()
{
int i,j,k,l;
scanf("%d%d%d",&n,&m,&t);
memset(c,,sizeof(c));
for(i=;i<=n;i++)
for(j=;j<=m;j++)
{
scanf("%1d",&g[i][j]);
if(j==||g[i][j]!=g[i][j-])c[i]++;//换新一行或颜色改变时
}
for(l=;l<=n;l++)//枚举行数
{
memset(f,,sizeof(f));
for(i=;i<=m;i++)//枚举每前i个数的情况
for(j=;j<=c[l];j++)//该行改变j次时(最多只需要改变mx[l]次!!
{
int sum=;
for(k=i;k>=j;k--)
{
if(g[l][k]==g[l][i])sum++;//i和k颜色相同sum++
f[i][j]=max(f[i][j],f[k-][j-]+sum);//前k个数在不变色的情况下再涂k~i,同色!加上颜色相同的r个即可
f[i][j]=max(f[i][j],f[k-][j-]+i-k+-sum); //前k个数在不变色的时候再涂k~i,不同色时,总共有(i-k+1)个格子,r个不同色!!加上(i-k+1-r)即为同色!!
// 总之 就是保留之前的那个最优状态,或是有更优状态更新!!
}
crt[l][j]=max(crt[l][j],f[i][j]);//找出改行每算一段中最多正确的格子数
}
}
//然后,显而易见的背包
for(k=;k<=n;k++)
for(i=t;i>=;i--)
for(j=;j<=min(c[k],i);j++)
{
dp[i]=max(dp[i],dp[i-j]+crt[k][j]);
}
printf("%d",dp[t]);
return ;
}
点击查看丑陋の代码&注释
<SCOI2009>粉刷匠の思路的更多相关文章
- Luogu P4158 [SCOI2009]粉刷匠(dp+背包)
P4158 [SCOI2009]粉刷匠 题意 题目描述 \(windy\)有\(N\)条木板需要被粉刷.每条木板被分为\(M\)个格子. 每个格子要被刷成红色或蓝色. \(windy\)每次粉刷,只能 ...
- BZOJ 1296: [SCOI2009]粉刷匠 分组DP
1296: [SCOI2009]粉刷匠 Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上 ...
- BZOJ 1296: [SCOI2009]粉刷匠( dp )
dp[ i ][ j ] = max( dp[ i - 1 ][ k ] + w[ i ][ j - k ] ) ( 0 <= k <= j ) 表示前 i 行用了 j 次粉刷的机会能正 ...
- 【BZOJ1296】[SCOI2009]粉刷匠(动态规划)
[BZOJ1296][SCOI2009]粉刷匠(动态规划) 题面 BZOJ 洛谷 题解 一眼题吧. 对于每个串做一次\(dp\),求出这个串刷若干次次能够达到的最大值,然后背包合并所有的结果即可. # ...
- 1296: [SCOI2009]粉刷匠[多重dp]
1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1919 Solved: 1099[Submit][Statu ...
- 【BZOJ1296】[SCOI2009]粉刷匠 (DP+背包)
[SCOI2009]粉刷匠 题目描述 \(windy\)有 \(N\) 条木板需要被粉刷. 每条木板被分为 \(M\) 个格子. 每个格子要被刷成红色或蓝色. \(windy\)每次粉刷,只能选择一条 ...
- 背包 DP【洛谷P4158】 [SCOI2009]粉刷匠
P4158 [SCOI2009]粉刷匠 windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上 ...
- BZOJ_1296_[SCOI2009]粉刷匠_DP
BZOJ_1296_[SCOI2009]粉刷匠_DP Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能 ...
- [Bzoj1296][Scoi2009] 粉刷匠 [DP + 分组背包]
1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2184 Solved: 1259[Submit][Statu ...
随机推荐
- Activiti工作流的入门介绍
一.activiti介绍 Activiti5是一个 业务流程管理(BPM)框架,它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易扩展的可执行流程语言框架.Activiti基于Ap ...
- day64-html-form表单
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
- 关于http协议的总结
http协议知识结构图 简介 HTTP(HyperText Transfer Protocol),超文本传输协议,是Web应用的基本协议 HTTP规定了客户端(浏览器)和服务器之间的通信步骤以及通信时 ...
- node/静态路由/express框架中的express.static()和app.use()
此篇文章转载于 express框架中的express.static()和app.use() Express框架在使用app.use中传入express.static设置静态路由时,这个文件夹下的所有文 ...
- Maven依赖三板大斧
一:问题出现场景 记得有一次,面试时候面试官问了个问题,来哥们,“你们项目是maven搭建哈,你的项目里如果出现架包冲突了,你们怎么解决的?”. 我:......,装作很淡定,我们是通过报错,定位哪个 ...
- python-day4爬虫基础之正则表达式
正则表达式:(字符串匹配) 使用单个字符串来描述匹配一系列符合某个句法规则的字符串 是对字符串操作的一种逻辑公式 应用场景:处理文本和数据 正则表达式过程:依次拿出表达式和文本中的字符比较,如果每一个 ...
- 自动按键的Sendkeys工具的下载和使用
大家好! 下面介绍一款自动按键的小工具:Sendkeys 下载地址 Sendkeys.rar 按键脚本的书写规则如下: 启动本工具后,在工具中打开一个脚本文件,然后在工具中按下Ctrl+A全选所有脚本 ...
- SQL:找到特定日期每个顾客最高购买量:Find the highest purchase amount ordered by the each customer on a particular date, with their ID, order date and highest purchase amount.
A: SELECT customer_id,ord_date,MAX(purch_amt) FROM orders GROUP BY customer_id,ord_date; find the hi ...
- java常用工具类(三)
一.连接数据库的综合类 package com.itjh.javaUtil; import java.sql.Connection; import java.sql.DriverManager; im ...
- split - 拆分文件
拆分文件 # 每个文件的行数为1000行 split -l 1000 test.txt # 将test文件拆分,20M一个文件 split -b 20M test.txt test文件拆分,并且文件名 ...