除非人品好,能碰巧想到思路,否则基本是做不出来dp的,除了那几个经典的dp模型。。
看了几个前几名的代码,还是t神的代码比较清晰。膜tourist
代码的思路和题解思路基本一致。。。。。

#include <bits/stdc++.h>
using namespace std; const int MAXN = 1234567; char s[MAXN];
int f[MAXN];
int nxt[MAXN],prv[MAXN]; int main()
{
int n;
scanf("%d", &n);
scanf("%s", s);
memset(f,0,sizeof(f));
nxt[n] = n;
//记录以当前位置开始,向后数,第一个0的位置
for(int i = n-1; i >= 0; --i)
{
if(s[i] == '0')
nxt[i] = i;
else
nxt[i] = nxt[i+1];
}
//记录以当前位置开始,向前数,第一个0的位置
for(int i = 0; i < n; ++i)
{
if(s[i] == '0')
prv[i] = i;
else
prv[i] = (i==0?-1:prv[i-1]);
}
//两个部分分别更新当前位置和向后更新
for(int i = 0; i <= n; ++i)
{
//更新11111101...这种形式的子串
if(i >= 3 && s[i-1] == '1' && s[i-2] == '0' && s[i-3] == '1')
{
int j = prv[i-3];
f[i] = max(f[i],f[j+1]+(i-j-3));
if(j != i-4)
f[i] = max(f[i],f[j+2]+(i-j-4));
}
if(i == n)
break;
//更新11111101....这种形式的子串
if(i+3 <= n && s[i] == '1' && s[i+1] == '0' && s[i+2] == '1')
{
int j = nxt[i+2];
f[j] = max(f[j],f[i]+(j-i-2));
if(j != i+3)
f[j-1] = max(f[j-1],f[i]+(j-i-3));
}
f[i+1] = max(f[i+1],f[i]);
}
printf("%d\n",f[n]);
return 0;
}

CODE FESTIVAL 2017 qual B D 101 to 010(dp)的更多相关文章

  1. Atcoder CODE FESTIVAL 2017 qual B D - 101 to 010 dp

    题目链接 题意 对于一个\(01\)串,如果其中存在子串\(101\),则可以将它变成\(010\). 问最多能进行多少次这样的操作. 思路 官方题解 转化 倒过来考虑. 考虑,最终得到的串中的\(' ...

  2. [AtCoder Code Festival 2017 QualB D/At3575] 101 to 010 - dp

    [Atcoder Code Festival 2017 QualB/At3575] 101 to 010 有一个01序列,每次可以选出一个101,使其变成010,问最优策略下能操作几次? 考虑像 11 ...

  3. 题解【AtCoder - CODE FESTIVAL 2017 qual B - D - 101 to 010】

    题目:https://atcoder.jp/contests/code-festival-2017-qualb/tasks/code_festival_2017_qualb_d 题意:给一个 01 串 ...

  4. CODE FESTIVAL 2017 qual C F - Three Gluttons(DP)

    洛谷题面传送门 & Atcoder 题面传送门 DP 好题. 首先考虑如果我们知道 C 吃了哪些寿司,能够还原出多少种符合条件的序列.我们考虑倒着钦定,即,先钦定 A,B,C 三者最后吃的那三 ...

  5. CODE FESTIVAL 2017 qual B B - Problem Set【水题,stl map】

    CODE FESTIVAL 2017 qual B B - Problem Set 确实水题,但当时没想到map,用sort后逐个比较解决的,感觉麻烦些,虽然效率高很多.map确实好写点. 用map: ...

  6. CODE FESTIVAL 2017 qual B C - 3 Steps【二分图】

    CODE FESTIVAL 2017 qual B C - 3 Steps 题意:给定一个n个结点m条边的无向图,若两点间走三步可以到,那么两点间可以直接连一条边,已经有边的不能连,问一共最多能连多少 ...

  7. 【AtCoder】CODE FESTIVAL 2017 qual B

    最近不知道为啥被安利了饥荒,但是不能再玩物丧志了,不能颓了 饥荒真好玩 A - XXFESTIVAL CCFESTIVAL #include <bits/stdc++.h> #define ...

  8. CODE FESTIVAL 2017 qual B 题解

    失踪人口回归.撒花\^o^/ 说来真是惭愧,NOI之后就没怎么刷过题,就写了几道集训队作业题,打了几场比赛还烂的不行,atcoder至今是蓝名=.= 以后还是多更一些博客吧,我可不想清华集训的时候就退 ...

  9. 101 to 010 Atcoder CODE FESTIVAL 2017 qual B D

    https://www.luogu.org/problemnew/show/AT3575 题解 根本不会.. 错误记录:缺少32行的转移.显然这个转移是必要的 #include<cstdio&g ...

随机推荐

  1. Ubuntu 服务器默认的root账号是没有激活的,需要用初装的用户账号给root设置管理密码

    user@ubuntu12:~$ sudo password root //用sudo修改账户 1.根据提示输入当前用户的密码: 2.修改成功之后你就可以使用root账号了,可以使用su root 命 ...

  2. 按照in条件排序

    --按照in中条件排序 ,,,) order by instr('395,396,399,313',ghdm);

  3. 【python之路14】发送邮件实例

    1.发邮件的代码 from email.mime.text import MIMEText from email.utils import formataddr import smtplib msg ...

  4. 微信小程序-- WXML语法

    页面数据 test.js test.wxml 运行结果:

  5. php 7.2 安装 mcrypt 扩展

    升级 php 7.2 后,使用微信提供的加解密代码时,提示 call to undefined function mcrypt_module_open() :大脑疯狂运转1秒钟后,得出结论:php 7 ...

  6. python实现六大分群质量评估指标(兰德系数、互信息、轮廓系数)

    python实现六大分群质量评估指标(兰德系数.互信息.轮廓系数) 1 R语言中的分群质量--轮廓系数 因为先前惯用R语言,那么来看看R语言中的分群质量评估,节选自笔记︱多种常见聚类模型以及分群质量评 ...

  7. WPF style 换肤

    原文地址:http://www.cnblogs.com/DebugLZQ/p/3181040.html 原作者:DebugLZQ UI的风格一致性是应用程序应当关注的重要特性. 1.Creating ...

  8. Codeforces Beta Round #77 (Div. 2 Only) A. Football【字符串/判断是否存在连续7个0或7个1】

    A. Football time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  9. Vue项目中出现Loading chunk {n} failed问题的解决方法

    最近有个Vue项目中会偶尔出现Loading chunk {n} failed的报错,报错来自于webpack进行code spilt之后某些bundle文件lazy loading失败.但是这个问题 ...

  10. Linux用户程序配置文件

    在 Linux(和一般的 UNIX)中,有无数的“用户”程序.最常见的一种用户程序配置文件是 /etc/lynx.cfg.这是著名的文本浏览器 lynx 的配置文件.通过这个文件,您可以定义代理服务器 ...