明天就要去实验室干活了。。。。下次再打题不知是何时。。。。

题目链接:

http://hihocoder.com/contest/hihointerview11/problem/2

这题不难,一开始想错了。。。。其实并不复杂,从低位到高位,逐个1处理。

我用了个简单dp。

先将n转化成二进制。

我们划分出每个1+x个0的情况(x可为0)。

对于单个模块假设有s0[i+1]种情况,在前一个模块退一个1的情况下有s1[i+1]中情况。(这是有规律的)

假设不进位的情况下情况数:dp[0][i]

进位的情况下情况数:dp[1][i]

这样得到转移方程:dp[0][i+1] = s0[i+1]*dp[0][i] + dp[1][i]

dp[1][i+1] = s1[i+1]*dp[0][i] + dp[1][i]

AC代码:

 #include <bits/stdc++.h>

 using namespace std;
const int maxn = ; int p[maxn];
typedef long long int64; int64 dp[][maxn]; int main(void){
int n;
scanf("%d", &n); if(n == ){
printf("1\n");
}else{
int cnt = ;
while(n){
p[cnt++] = n%;
n >>= ;
} vector<int> v;
int t = ;
for(int i = ; i < cnt; ++i){
if(p[i] == ){
t++;
}else{
v.push_back(t);
t = ;
}
}
//cout << "haha" << endl; int sz = v.size();
int64 ans;
dp[][] = v[], dp[][] = v[]-;
for(int i = ; i < sz; ++i){
dp[][i] = v[i]*dp[][i-] + dp[][i-];
dp[][i] = (v[i]-)*dp[][i-] + dp[][i-];
}
/*for(int i = 0; i < sz; ++i)
cout << dp[0][i] << " " << dp[1][i] << endl;*/
ans = dp[][sz-]; printf("%lld\n", ans);
} return ;
}

hihoCoder 扩展二进制数的更多相关文章

  1. hihocoder 1331 - 扩展二进制数 - [hiho一下168周]

    题目链接:http://hihocoder.com/problemset/problem/1331 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 我们都知道二进制数的每 ...

  2. hihocoder 1331 扩展二进制数(递归)

    传送门 题意 略 分析 由低位向高位考虑,令f(n)为n的扩展二进制数表示数 1.当前数为偶数,末位为0或2,那么f(n)=f(n/2)+f(n/2-1) 2.当前数为奇数,末位为1,那么f(n)=f ...

  3. hihoCoder扩展欧几里得

    #include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h&g ...

  4. hiho一下 第168周

    题目1 : 扩展二进制数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 我们都知道二进制数的每一位可以是0或1.有一天小Hi突发奇想:如果允许使用数字2会发生什么事情? ...

  5. hihocoder 1084 扩展KMP && 2014 北京邀请赛 Justice String

    hihocoder 1084 : http://hihocoder.com/problemset/problem/1084 北京邀请赛 Just  String http://www.bnuoj.co ...

  6. 【hihocoder 1297】数论四·扩展欧几里德

    [题目链接]:http://hihocoder.com/problemset/problem/1297 [题意] [题解] 问题可以转化为数学问题 即(s1+v1*t)%m == (s2+v2*t)% ...

  7. 【hihocoder 1257 Snake Carpet】构造

    2015北京区域赛现场赛第4题. 题面:http://media.hihocoder.com/contests/icpcbeijing2015/problems.pdf OJ链接:http://hih ...

  8. Unicode其实是Latin1的扩展。只有一个低字节的Uncode字符其实就是Latin1字符——附各种字符编码表及转换表

    一.概念 1,ASCII             ASCII(American Standard Code for Information Interchange),中文名称为美国信息交换标准代码.是 ...

  9. ES6数字扩展

    前面的话 本文将详细介绍ES6数字扩展 指数运算符 ES2016引入的唯一一个JS语法变化是求幂运算符,它是一种将指数应用于基数的数学运算.JS已有的Math.pow()方法可以执行求幂运算,但它也是 ...

随机推荐

  1. Maven 手动添加本地jar包

    mvn install:install-file -Dfile=jar绝对路径 -DgroupId=项目组织唯一的标识符 -DartifactId=项目的唯一的标识符 -Dversion=jar版本 ...

  2. Fibonacci--poj3070(矩阵快速幂)

    http://poj.org/problem?id=3070 Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn ...

  3. FATE---hdu2159(二重背包)

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. Linux查看日志三种命令(转载)

    第一种:查看实时变化的日志(比较吃内存) 最常用的: tail -f filename (默认最后10行,相当于增加参数 -n 10) Ctrl+c 是退出tail命令 其他情况: tail -n 2 ...

  5. foobar2000 iOS使用,并连接PC的歌曲进行播放

    foobar2000移动版下载地址:http://mobile.foobar2000.com/ 要实现歌曲互通有两种方法,使用iOS客户端的FTP Server用PC上传歌曲到iOS手机,和在PC上使 ...

  6. linux下启动mysql服务(类似于windows下net start mysql)

    1.linux系统启动方式:service mysql start.其类似于windows下net start mysql

  7. 【c++】c++一些基础面试题

    http://www.mianwww.com/html/2013/10/19128.html http://blog.csdn.net/wdzxl198/article/details/9050751 ...

  8. 移动APP怎样保存用户password

    <span style="font-size:14px;">为了更好的用户体验,移动APPclient一般都会将用户信息进行保存以便兴许能够自己主动登录.</sp ...

  9. C++问题记录

    问题idx: 1) 怎么在VS2010下新建一个像VC6.0 中那样的控制台C++程序. cdate: 2014-4-24 A1: VC6.0 对标准C++集的支持不是太好, VS2010也有一些吧, ...

  10. CSVReader

    从网上找了一个开源的东东 ,网址 https://www.csvreader.com/