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

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN = 1234567;
  4. char s[MAXN];
  5. int f[MAXN];
  6. int nxt[MAXN],prv[MAXN];
  7. int main()
  8. {
  9. int n;
  10. scanf("%d", &n);
  11. scanf("%s", s);
  12. memset(f,0,sizeof(f));
  13. nxt[n] = n;
  14. //记录以当前位置开始,向后数,第一个0的位置
  15. for(int i = n-1; i >= 0; --i)
  16. {
  17. if(s[i] == '0')
  18. nxt[i] = i;
  19. else
  20. nxt[i] = nxt[i+1];
  21. }
  22. //记录以当前位置开始,向前数,第一个0的位置
  23. for(int i = 0; i < n; ++i)
  24. {
  25. if(s[i] == '0')
  26. prv[i] = i;
  27. else
  28. prv[i] = (i==0?-1:prv[i-1]);
  29. }
  30. //两个部分分别更新当前位置和向后更新
  31. for(int i = 0; i <= n; ++i)
  32. {
  33. //更新11111101...这种形式的子串
  34. if(i >= 3 && s[i-1] == '1' && s[i-2] == '0' && s[i-3] == '1')
  35. {
  36. int j = prv[i-3];
  37. f[i] = max(f[i],f[j+1]+(i-j-3));
  38. if(j != i-4)
  39. f[i] = max(f[i],f[j+2]+(i-j-4));
  40. }
  41. if(i == n)
  42. break;
  43. //更新11111101....这种形式的子串
  44. if(i+3 <= n && s[i] == '1' && s[i+1] == '0' && s[i+2] == '1')
  45. {
  46. int j = nxt[i+2];
  47. f[j] = max(f[j],f[i]+(j-i-2));
  48. if(j != i+3)
  49. f[j-1] = max(f[j-1],f[i]+(j-i-3));
  50. }
  51. f[i+1] = max(f[i+1],f[i]);
  52. }
  53. printf("%d\n",f[n]);
  54. return 0;
  55. }

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. python基础--常用的模块(collections、time、datetime、random、os、sys、json、pickle)

    collection模块: namedtuple:它是一个函数,是用来创建一个自定义的tuple对象的,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素.所以我们就可以 ...

  2. python自动化--批量执行测试之生成报告

    一.生成报告 1.先执行一个用例,并生成该用例的报告 # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webd ...

  3. centos下彻底删除mysql

    打算重新试试安装两个mysql,就把老的删除了. yum remove mysql mysql-server mysql-libs compat-mysql51 rm -rf /var/lib/mys ...

  4. jquery中clientY,pageY和screenY的区别 最后三张图一目了然。

    <!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equ ...

  5. Vue--vue中的生命周期

    Vue的生命周期: 在理解vue生命周期前要把握它的三个重点: 创建-> 改变 -> 销毁 创建: 1.执行beforeCreate 2.监控data 3.注册事件 4.执行create ...

  6. selenium 常见问题之 nknown error: call function result missing ‘value’

    运行时候出现错误提示如下: 出现该问题原因:chrome浏览器自动升级.导致和chromedriver支持的版本不匹配. 解决方案有两种(本人采用的是第一种方式解决办法.): 1.下载和当前使用的ch ...

  7. python fullmatch函数

  8. Codeforces 293B Distinct Paths DFS+剪枝+状压

    目录 题面 题目链接 题意翻译 输入输出样例 输入样例#1 输出样例#1 输入样例#2 输出样例#2 输入样例#3 输出样例#3 输入样例#4 输出样例#4 说明 思路 AC代码 总结 题面 题目链接 ...

  9. goland的下载安装破解并配置

    1.下载地址:https://www.jetbrains.com/go/ 2.安装:简单 3.破解:https://www.cnblogs.com/igoodful/p/9113946.html 4. ...

  10. 关于sublime text2的一些问题(为解决)

    1. 编写markdown文件后,如何转成pdf ? 2. 执行程序时,如何在控制台输入数据?