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

这题思路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. 洛谷 [P3398] 仓鼠找sugar

    树剖求LCA 我们可以发现,两条路径ab,cd相交,当且仅当 dep[lca(a,b)]>=dep[lca(c,d)]&(lca(lca(a,b),c)==lca(a,b)||lca(l ...

  2. HDU [P1150] Machine Schedule

    二分图匹配求最小点覆盖 把两个机器作为两个集合,把每个任务当做边建图.那么所求的就是二分图的最小点覆盖. 但是最开始WA了,原因在于,题目要求的是变换的次数,也就是与0连的边需要删去. #includ ...

  3. XSD详解三 - 复合元素+总结篇

    一.复合元素介绍 1.什么是复合元素? 复合元素指包含其他元素及/或属性的 XML 元素. 有四种类型的复合元素: 空元素 包含其他元素的元素 仅包含文本的元素 包含元素和文本的元素 注释:上述元素均 ...

  4. SpringMVC之使用requestMapping映射请求、映射参数、映射头

    1. 映射请求 作用:使用requestMapping可以指定处理器可以处理那些请求 地方:类和方法前面都可以 @requestMapping 类定义处: 提供初步的请求映射信息,相对于web应用的根 ...

  5. Windows Server 2012开启多人远程

    首先在Server Roles中选择Remote Desktop Services,然后在Role Services中安装Remote Desktop Session Host 安装完成后需要重启机器 ...

  6. .net 远程调试

    1.我们在调试支付接口的时候很多情况下需要请求网关等,这时候需要在服务器上进行调试 首先找到服务器上的msvsmon文件,打开运行,得到对应的端口 然后打开vs,附加进程到远程地址加上端口,然后附加w ...

  7. [Python Study Notes]文件操作

    文件操作 对文件操作流程 打开文件,可添加filepath打开某绝对路径下的文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 # The_author = 'liu66' # -* ...

  8. .NET常用第三方库(包)总结

    文章会不定期更新,以下内容均为个人总结,欢迎各位拍砖指正 序列化与反序列化 JSON.NET应该是.NET平台上使用最为广泛的序列化/反序列化包了,ASP.NET和ASP.NET Core中默认序列化 ...

  9. Oracle批量操作数据库

    1:批量插入 <insert id="insertBatch" parameterType="Java.util.List" > insert in ...

  10. Js比较对Object类型进行排序

    <script> var data=[{name:"121",age:"18",year:"2018"},{name:" ...