这题的题解和我写的有一拼,异常简洁,爆炸。

这题思路dp
dp[i][j] 表示的是讨论到第n位,并比原数的前n位多了 j∗2i
显然j只能取0,1,毕竟2进制嘛
之后转移就好了,注意下面两个重要状态
dp[i][1]=dp[i][0]+2
dp[i][0]=dp[i][1]+2

#include <cstdio>
#include <cstring>
#include <vector>
#include <iostream>
#include <queue>
using namespace std;
const int N = 1e6+5;
const int MOD = 998244353;
const int INF = 0x3f3f3f3f;
char s[N];
int dp[N][2];
void gmin(int &a, int b) {
if(a > b) a = b;
} int main() {
while(~scanf("%s", s)) {
int len = strlen(s);
memset(dp, INF, sizeof(dp));
for(int i = len+1; i >= 2; --i) s[i] = s[i-2];
// for(int i = 2; i < len+2; ++i) printf("%c", s[i]); printf("\n");
s[1] = '0'; s[len+2] = '0';
// for(int i = 2; i <= len+1; ++i) printf("%c", s[i]); printf("\n");
dp[0][0] = 0; for(int i = 1; i <= len+2; ++i) {
for(int j = 0; j < 2; ++j) {
// if(dp[i-1][j] == INF) continue; if(j == 0) {
if(s[i] == '0') {
gmin(dp[i][0], dp[i-1][0]);
gmin(dp[i][1], dp[i-1][0] + 2);
} else {
gmin(dp[i][0], dp[i-1][0] + 2);
}
}else {
if(s[i] == '0') {
gmin(dp[i][1], dp[i-1][1] + 2);
}else {
gmin(dp[i][0], dp[i-1][1] + 2);
gmin(dp[i][1], dp[i-1][1]);
}
}
}
// printf("%d:%d %d\n", i, dp[i][0], dp[i][1]);
} printf("%d\n", dp[len+2][0]-1);
}
return 0;
}

hihocoder Challenge 29 B.快速乘法的更多相关文章

  1. hihocoder Challenge 29 A.序列的值

    我现在就感觉我这人现在真的没有dp的意识 其实真写起来也不难,但是把就是练的少思维跟不上,dp从根本上就是一种状态的提炼和聚集. 按照题解的意思来,表示二进制第i位的值为j(0,1)的组合有多少,然后 ...

  2. hihocoder Challenge 29 D. 不上升序列

    这场爆零比赛题目还是要补的 这道题据说是出烂掉的原题,我找了下 CF13.C/ CF371 div1 C,一模一样 我服这群原题大佬 为 当时,使 不严格递增的最小步数,那么 Otherwise 显然 ...

  3. HDU 5768 Lucky7 (中国剩余定理 + 容斥 + 快速乘法)

    Lucky7 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 Description When ?? was born, seven crow ...

  4. 【中国剩余定理】【容斥原理】【快速乘法】【数论】HDU 5768 Lucky7

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 题目大意: T组数据,求L~R中满足:1.是7的倍数,2.对n个素数有 %pi!=ai  的数 ...

  5. 快速幂&快速乘法

    尽管快速幂与快速乘法好像扯不上什么关系,但是东西不是很多,就一起整理到这里吧 快速幂思想就是将ax看作x个a相乘,用now记录当前答案,然后将指数每次除以2,然后将当前答案平方,如果x的2进制最后一位 ...

  6. [BZOJ4002][JLOI2015]有意义的字符串-[快速乘法+矩阵乘法]

    Description 传送门 Solution 由于这里带了小数,直接计算显然会爆掉,我们要想办法去掉小数. 而由于原题给了暗示:b2<=d<=(b+1)2,我们猜测可以利用$(\fra ...

  7. 整数快速乘法/快速幂+矩阵快速幂+Strassen算法

    快速幂算法可以说是ACM一类竞赛中必不可少,并且也是非常基础的一类算法,鉴于我一直学的比较零散,所以今天用这个帖子总结一下 快速乘法通常有两类应用:一.整数的运算,计算(a*b) mod c  二.矩 ...

  8. 快速乘法,幂计算 hdu5666

    在实际应用中为了防止数据爆出,在计算a*b%m和x^n%m时,可以采用此方法.在数论中有以下结论: a*b%m=((a%m)*(b*m))%m ; (a+b)%m=(a%m+b%m)%m ; _int ...

  9. HDU 5768Lucky7(多校第四场)容斥+中国剩余定理(扩展欧几里德求逆元的)+快速乘法

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=5768 Lucky7 Time Limit: 2000/1000 MS (Java/Others)    M ...

随机推荐

  1. Linux中的Buffer 与 Cache

    A buffer is something that has yet to be "written" to disk.       A cache is something tha ...

  2. tomcat集群与负载均衡

    参考文章http://kalogen.iteye.com/blog/784908,加上了自己调试过程中遇到的问题. 注1:实现此集群的方法参考了网上的很多文章,但由于很多文章都表明是原创的,故无法知道 ...

  3. BZOJ 3781: 小B的询问 [莫队]

    求区间每种颜色出现次数平方和 写裸题练手 #include <iostream> #include <cstdio> #include <algorithm> #i ...

  4. 通过Log4net来配置我们需要的日志文件格式

      我们先来看看配置写入txt文件是如何 的,当然不止可以配置txt格式还有其它格式. <?xml version="1.0" encoding="utf-8&qu ...

  5. 读书共享 Primer Plus C-part11

    第十四章结构和其他数据形式 关于fread以及fwrite fread(char* buff,int size,int count,FILE* fp) fwrite(char* buff,int si ...

  6. 使用 Homebrew 安装 Git

    3.2.3 使用 Homebrew 安装 Git 2011-07-27 08:52 蒋鑫 机械工业出版社 字号:T | T 综合评级: 想读(13)  在读(6)  已读(8)   品书斋鉴(1)   ...

  7. LNMP搭建03 -- 编译安装PHP

    [编译安装PHP]  为了顺利安装PHP,先安装下面这些: [CentOS 编译 PHP 前要做的事情] yum install -y gcc gcc-c++  make zlib zlib-deve ...

  8. dedecms data文件夹外迁

    出于网站安全考虑,我们一般要把data文件夹迁移到网站根目录外面. dedecms data文件夹外迁方法: 1. 修改首页文件中配置文件路径 打开/index.php,把代码 if(!file_ex ...

  9. Android 文件下载三种基本方式

    一.自己封装URLConnection 连接请求类 public void downloadFile1() { try{ //下载路径,如果路径无效了,可换成你的下载路径 String url = & ...

  10. Thinkpad USB 经典键盘使用体验

    先上图,这就是一个键盘,不是笔记本电脑. 优点: 1. 键盘完胜各类巧克力式键盘. 2. 小红点和老thinkpad 上的小红点一样好用. 3. ESC 和Delete 放大后,盲摸很方便. 缺点: ...