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

题目链接:

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. msp430项目编程10

    msp430中项目---电子密码锁 1.扫描键盘工作原理 2.电路原理说明 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习

  2. 动态规划:Monkey and Banana

    Problem Description A group of researchers are designing an experiment to test the IQ of a monkey. T ...

  3. eclipse菜单字体乱码的解决

    方法一: 这个跟活动控制台代码页有关. 如果要更改为 UTF-8,则需要运行 chcp 命令: chcp 65001 有时新安装的系统可能在运行一些中文软件时显示错乱,可通过控制面板修改系统区域来管理 ...

  4. 异步SOCKET分包和组包的一种通用算法

    unit uPackage;// 应用协议// cxg 2016-9-23// 包=包头+包体 interface uses SysUtils, Classes, PeachCtrl.Net.Iocp ...

  5. FIREDAC保存ORACLE的BLOB字段数据

     FIREDAC默认识别ORACLE的BLOB字段为HUGEBLOB,需要将HBLOB映射为BLOB,才可以保存ORACLE的BLOB字段的数据.

  6. 【stl学习笔记】vector

    vector是定义于namespace std内的template: namespace std { template<class T, class Allocator = allocator& ...

  7. topcoder srm 610

    div1 250pt: 题意:100*100的01矩阵,找出来面积最大的“类似国际象棋棋盘”的子矩阵. 解法:枚举矩阵宽(水平方向)的起点和终点,然后利用尺取法来找到每个固定宽度下的最大矩阵,不断更新 ...

  8. DLL混淆

  9. Office EXCEL 如何为宏命令指定快捷键或者重新设置快捷键

    1 工具-宏-宏,打开宏窗口   2 鼠标单击任意宏将其选中,点击宏选项,即可修改或为他增加快捷键.   3 注意,你直接在Visual Basci编辑器里面改是不行的,因为加了'的只是注释而已  

  10. [经典面试题]在O(1)时间删除链表结点

    [题目] 给定链表的头指针和一个结点指针.在O(1)时间删除该结点.链表结点的定义例如以下: struct ListNode { int        value; struct ListNode*  ...