zoukankan      html  css  js  c++  java
  • 20180706模拟赛T2——染色

    文件名: seq
    题目类型: 传统题
    时间限制: 1秒
    内存限制: 128MB
    编译优化:

    题目描述

    小A正在帮助小M刷她家的墙壁
    小M家的墙可以分为(n)块,每段需要被刷成黑色或者白色。你可以认为每一块墙最开始时既不是黑色也不是白色。
    小M有一把神奇的刷子,每次可以刷连续的一段墙,但先刷的颜色会被后刷的颜色覆盖。这把刷子只能够用(k)
    现在小A想要知道,最多能正确地刷对多少块墙的颜色。

    输入格式

    第一行两个正整数(n,k)
    接下来(n)个整数,每个整数都是0或者1表示这块墙需要被刷成的颜色。

    输出格式

    共一行一个整数,表示最多能刷对几块墙的颜色。

    样例输入

    5 2
    0 1 0 1 0

    样例输出

    4

    样例解释

    先刷1到5,再刷2到4

    数据规模与约定

    对于30%的数据,(n≤3000)
    对于另30%的数据,(k≤3)
    对于100%的数据,(n≤100000,k≤50)

    题解

    首先,对于一块墙,刷一定不比不刷劣,因为你可以在刷其它块的时候捎带着刷掉这块。

    我们发现如果刷完后没完全符合,那一定有(2k-1)段,因为每一次刷的颜色不可能与旁边几段颜色相同,也不可能完全覆盖之前刷的一段)。

    于是我们就可以从左往右扫了,于是我们考虑dp。

    (f[i][j][0/1])表示刷到第(i)块,刷了(j)次,最左边那块是白色/黑色,不难得出转移方程

    dp[i][j][0] = max(dp[i-1][j-1][1], dp[i-1][j][0]) + (tmp == 0);
    dp[i][j][1] = max(dp[i-1][j-1][0], dp[i-1][j][1]) + (tmp == 1);
    

    tmp是读入的第i个数。

  • 相关阅读:
    一个支持asp.net2.0和Sql server及Access的免费空间
    ASP.NET2.0数据指南中文版索引
    所阅读的ASP.NET 2.0文章
    SQL SERVER实用技巧
    2000/XP/2003常见问题集锦
    解讀多重啟動引導文件——BOOT.INI
    【译】Html5游戏开发示例(2)
    unity3d 鼠标事件穿透GUI的处理
    【译】Html5游戏开发示例(3)
    unity3d 截屏
  • 原文地址:https://www.cnblogs.com/pfypfy/p/9275105.html
Copyright © 2011-2022 走看看