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>粉刷匠の思路的更多相关文章

  1. Luogu P4158 [SCOI2009]粉刷匠(dp+背包)

    P4158 [SCOI2009]粉刷匠 题意 题目描述 \(windy\)有\(N\)条木板需要被粉刷.每条木板被分为\(M\)个格子. 每个格子要被刷成红色或蓝色. \(windy\)每次粉刷,只能 ...

  2. BZOJ 1296: [SCOI2009]粉刷匠 分组DP

    1296: [SCOI2009]粉刷匠 Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上 ...

  3. BZOJ 1296: [SCOI2009]粉刷匠( dp )

    dp[ i ][ j ] = max( dp[ i - 1 ][ k ] + w[ i ][ j - k ] )  ( 0 <= k <= j ) 表示前 i 行用了 j 次粉刷的机会能正 ...

  4. 【BZOJ1296】[SCOI2009]粉刷匠(动态规划)

    [BZOJ1296][SCOI2009]粉刷匠(动态规划) 题面 BZOJ 洛谷 题解 一眼题吧. 对于每个串做一次\(dp\),求出这个串刷若干次次能够达到的最大值,然后背包合并所有的结果即可. # ...

  5. 1296: [SCOI2009]粉刷匠[多重dp]

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

  6. 【BZOJ1296】[SCOI2009]粉刷匠 (DP+背包)

    [SCOI2009]粉刷匠 题目描述 \(windy\)有 \(N\) 条木板需要被粉刷. 每条木板被分为 \(M\) 个格子. 每个格子要被刷成红色或蓝色. \(windy\)每次粉刷,只能选择一条 ...

  7. 背包 DP【洛谷P4158】 [SCOI2009]粉刷匠

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

  8. BZOJ_1296_[SCOI2009]粉刷匠_DP

    BZOJ_1296_[SCOI2009]粉刷匠_DP Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能 ...

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

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

随机推荐

  1. Ubuntu---VIM 常用命令

    今天学习 VIM 的一些常用命令,向传说中的“最后一个编辑器”进攻,哈哈 插入命令: # insert i : 当前光标之前插入 I : 在此行的行首插入 o : 在下一行新起一行插入 O : 在上一 ...

  2. 第一行代码新闻例子报错 Unable to start activity ComponentInfo 原因

    E/AndroidRuntime: FATAL EXCEPTION: main Process: com.timemanager.jason.fragmentbestpractice, PID: 56 ...

  3. python——print函数

    .print()函数概述 print() 方法用于打印输出,是python中最常见的一个函数. 该函数的语法如下: print(*objects, sep=' ', end='\n', file=sy ...

  4. 浅析laravel路由执行原理

    包头SEO:目前很多文章已经对Laravel的执行原理做了详细介绍,这里只是为了个人做一下简单记录 首先看入口 index.php 关键的执行函数就是 handle方法 ,但是前面的几个预处理函数,包 ...

  5. TPO1-3Timberline Vegetation on Mountains

    At the upper timberline the trees begin to become twisted and deformed. This is particularly true fo ...

  6. 【转】Linux服务器命令行模式安装Matlab2014a

    转自http://www.aichengxu.com/diannao/39100.htm 0.下载安装包  下载Matlab2014a for Linux安装包的ISO镜像文件 将下载好的iso文件挂 ...

  7. bzoj1396识别子串(SAM+线段树)

    复习SAM板子啦!考前刷水有益身心健康当然这不是板子题/水题…… 很容易发现只在i位置出现的串一定是个前缀串.那么对答案的贡献分成两部分:一部分是len[x]-fa~len[x]的这部分贡献会是r-l ...

  8. 如何写JS库,JS库写法

    前言: 现在javascript库特别多,其写法各式各样,总结几种我们经常见到的,作为自己知识的积累.而目前版本的 JavaScript 并未提供一种原生的.语言级别的模块化组织模式,而是将模块化的方 ...

  9. Unable to cast object of type 'System.Int32' to type 'System.String'.

    最近在研究.netcore,尝试把前后端完全分离.但是在写接口的时候,Post参数是FromBody的时候报错了 Microsoft.AspNetCore.Diagnostics.DeveloperE ...

  10. WIFI模块AP和STA模式分别是什么意思

    无线AP(Access Point):即无线接入点,它用于无线网络的无线交换机,也是无线网络的核心.无线AP是移动计算机用户进入有线网络的接入点,主要用于宽带家庭.大楼内部以及园区内部,可以覆盖几十米 ...