题解:

比正解的做法要复杂

正解直接确定了最多有2k-1段

并且可以证明2k-1是一定可以覆盖的

于是可以直接dp

我的想法是先覆盖一段黑的,然后白的覆盖上去

所以f[i][0/1/2][0/1/2]

表示当前下面那层颜色是啥,上面那层颜色是啥

代码:

#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (rint i=h;i<=t;i++)
#define dep(i,t,h) for (rint i=t;i>=h;i--)
const int N=1e5+;
int n,kk,a[N];
int f[N][][][];
const int INF=1e9;
IL int max(rint x,rint y)
{
return x>y?x:y;
}
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n>>kk;
rep(i,,n) cin>>a[i];
rep(k,,)
{
rep(i,,)
rep(j,,)
f[][k][i][j]=-INF;
f[][k][][]=;
}
rep(i,,n)
rep(k,,kk)
{
int (*f1) []=f[i][k],(*f2) []=f[i-][k],(*f4) [];
if (k) f4=f[i][k-];
int ans1=,ans2=,ans3=,ans4=,ans5=;
rep(k1,,)
rep(k2,,)
ans1=max(ans1,f2[k1][k2]);
f1[][]=ans1;
ans2=max(f2[][],f2[][]);
if (k) ans2=max(ans2,f4[][]);
if (a[i]==) ans2++;
f1[][]=ans2;
ans3=max(f2[][],f2[][]);
if (k) ans3=max(ans3,f4[][]);
if (a[i]==) ans3++;
f1[][]=ans3;
ans4=f2[][];
if (k) ans4=max(ans4,f4[][]);
if (a[i]==) ans4++;
f1[][]=ans4;
ans5=f2[][];
if (k) ans5=max(ans5,f4[][]);
if (a[i]==) ans5++;
f1[][]=ans5;
}
int ans=;
rep(i,,)
rep(j,,)
ans=max(ans,f[n][kk][i][j]);
cout<<ans<<endl;
return ;
}

「BZOJ3791」作业的更多相关文章

  1. 【LibreOJ】#6392. 「THUPC2018」密码学第三次小作业 / Rsa 扩展欧几里得算法

    [题目]#6392. 「THUPC2018」密码学第三次小作业 / Rsa [题意]T次询问,给定正整数c1,c2,e1,e2,N,求正整数m满足: \(c_1=m^{e_1} \ \ mod \ \ ...

  2. 零元学Expression Blend 4 - Chapter 15 用实例了解互动控制项「Button」I

    原文:零元学Expression Blend 4 - Chapter 15 用实例了解互动控制项「Button」I 本章将教大家如何更改Button的预设Template,以及如何在Button内设置 ...

  3. 零元学Expression Blend 4 - Chapter 9 用实例了解布局容器系列-「Canvas」

    原文:零元学Expression Blend 4 - Chapter 9 用实例了解布局容器系列-「Canvas」 本系列将教大家以实做案例认识Blend 4 的布局容器,此章介绍的布局容器是Blen ...

  4. 「Sqlserver」数据分析师有理由爱Sqlserver之二-像使用Excel一般地使用Sqlserver

    大家一谈数据库,就觉得非常高深莫测,深不见底,非凡人敢去触摸.但Excel的话,没人敢说自己不会使用吧(相反一大堆人的简历上写着精通OFFICE所有软件套件).换作其他非微软厂商的数据库,的确很容易产 ...

  5. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  6. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  7. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  8. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  9. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

随机推荐

  1. maven:打包时报错,报’找不到符号’

    参考文章:https://www.cnblogs.com/kelly-one/p/7349930.html 问题描述: 工程开发调试都没有问题,就是不能导出WAR包,用mvn clean packag ...

  2. 使用AutoFac实现依赖注入

    1.基本使用 1.1新建MVC项目并安装Autofac 注意需要安装AutoFac和AutoFac.mvc5 Install-Package Autofac Install-Package Autof ...

  3. [MySql]索引的一些技巧

    一.多表子从查询 多表查询时,子查询可能会出现触发不了索引的情况 ,)); 上面语句,test_1和test_public都WHERE了主键id,常理来说这个查询不存在问题,事实上主语句并不会触发索引 ...

  4. bootstrap 3列表单布局

    <form class="form-horizontal" role="form"> <fieldset> <legend> ...

  5. linux与window互传文件

    首先我们的目标是把一个很大的文件传到linux中,所以我们先要让linux节点开启ftp服务 FTP  10.1.61.212 如果对方没有开启FTP服务,那么这个命令就不会有效果. 1.开启xftp ...

  6. Confluence 6 附件是如何被索引的

    当一个文件被上传到 Confluence 后,Confluence 将会尝试对文件进行解压,然后对文件中的内容进行索引.这样系统就能够允许用户对文件中的内容进行搜索,而不仅仅是搜索文件名.这个过程对系 ...

  7. Confluence 6 发送 Confluence 通知到其他 Confluence 服务器

    你可以配置 Confluence 服务器向其他的 Confluence 服务器发送消息.在这种情况下,Confluence 服务器将不会显示 workbox. 希望发送消息到其他 Confluence ...

  8. vue-cli3初尝试之路径别名配置

    let path = require('path') function resolve(dir) { return path.join(__dirname, dir) } module.exports ...

  9. ionic3 国际化

    http://www.cnblogs.com/huangenai/p/6868173.html 按上面这个网站的步骤整一遍, 但是ionic3 会报错  所以 在 import { NgModule ...

  10. gnuradio 创建cos_source

    C++教程 ys_linux@computer:~$ gr_modtool nm kcd Creating out-of-tree module in ./gr-kcd... Done. Use 'g ...