hiho一下158(hihocoder 1318)

非法二进制数

题意:求n位的二进制数中包含11的有多少个,并对1e9+7取模

思路:简单的状态压缩dp,dp[i][0]表示i位最末位为0的个数,dp[i][1]表示i位最末位为1的个数(这里指的是不包含11的),dp[i][2]表示答案,递推式见代码

AC代码:

#include "iostream"
#include "string.h"
#include "stack"
#include "queue"
#include "string"
#include "vector"
#include "set"
#include "map"
#include "algorithm"
#include "stdio.h"
#include "math.h"
#define ll long long
#define bug(x) cout<<x<<" "<<"UUUUU"<<endl;
#define mem(a) memset(a,0,sizeof(a))
#define mp(x,y) make_pair(x,y)
using namespace std;
const long long INF = 1e18+1LL;
const int inf = 2e9+1e8;
const int N=1e5+100;
const ll mod=1e9+7;

ll dp[105][5];
int n;
int main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin>>n;
    dp[1][0]=1,dp[1][1]=1,dp[1][2]=0;
    for(int i=2; i<=n; ++i){
        dp[i][0]=dp[i-1][0]+dp[i-1][1];
        dp[i][0]%=mod;
        dp[i][1]=dp[i-1][0];
        dp[i][1]%=mod;
        dp[i][2]=2*dp[i-1][2]+dp[i-1][1];
        dp[i][2]%=mod;
    }
    cout<<(dp[n][2]+mod)%mod<<endl;
    return 0;
}
时间: 2024-10-06 20:15:12

hiho一下158(hihocoder 1318)的相关文章

【转】Android4.4 之Bluetooth整理

原文网址:http://www.cnblogs.com/shed/p/3737016.html Android 4.4上蓝牙协议栈采用的是BRCM和Google共同开发的bluedroid,代替了之前的Bluez. 一. Bluetooth 源码分布 (基于Android 4.4 ) 1.  packages/apps/Settings/src/com/android/settings/bluetooth      bluetooth Settings 代码 2.  packages/apps/

hihocoder 1330 - 数组重排 - [hiho一下167周][最小公倍数]

题目链接:https://hihocoder.com/problemset/problem/1330 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi想知道,如果他每次都按照一种固定的顺序重排数组,那么最少经过几次重排之后数组会恢复初始的顺序? 具体来讲,给定一个1 - N 的排列 P,小Hi每次重排都是把第 i 个元素放到第 Pi个位置上.例如对于 P = (2, 3, 1),假设初始数组是(1, 2, 3),重排一次之后变为(3, 1, 2),重排两次之后

hiho一下第134周 1468 : 2-SAT&#183;hihoCoder新春晚会

1468 : 2-SAT·hihoCoder新春晚会 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 hihoCoder新春晚会正在紧张地筹备中.晚会分为上半场和下半场,总导演小Hi现在要为N个节目安排演出时间(上半场或下半场).为了描述方便,我们将第i个节目对应两个编号2i-1和2i,分别表示把第i个节目安排在上半场和下半场. 由于演员.道具和布景的限制.有些安排之间存在冲突,比如编号1的安排和编号4的安排有冲突,意味着"把第1个节目安排在上半场"同&q

hiho一下第133周 2-SAT&#183;hihoCoder音乐节(2-SAT)(强连通)

2-SAT·hihoCoder音乐节 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 hihoCoder音乐节由hihoCoder赞助商大力主办,邀请了众多嘉宾和知名乐队参与演出. 音乐会分为上午.下午两场进行,主办方指定了n首歌让乐队进行演唱.每首歌只会被演唱一次,要么在上午要么在下午. 参加音乐会的嘉宾们对于歌曲的演唱时间有一些要求.具体来说,每位嘉宾会指定两首歌曲的演唱时间(上午或者下午).如果最后实际的演出安排中,两首歌都没有达到嘉宾的要求,那么嘉宾就会对音

hihoCoder 骨牌覆盖问题&#183;一 hiho一下 第四十一周

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题:我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘.对于这个棋盘,一共有多少种不同的覆盖方法呢?举个例子,对于长度为1到3的棋盘,我们有下面几种覆盖方式: 提示:骨牌覆盖 提示:如何快速计算结果 输入 第1行:1个整数N.表示棋盘长度.1≤N≤100,000,000 输出 第1行:1个整数,表示覆盖方案数 MOD 19999997 样例输入 62247

hiho #1318 非法二进制数

#1318 : 非法二进制数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 如果一个二进制数包含连续的两个1,我们就称这个二进制数是非法的. 小Hi想知道在所有 n 位二进制数(一共有2n个)中,非法二进制数有多少个. 例如对于 n = 3,有 011, 110, 111 三个非法二进制数. 由于结果可能很大,你只需要输出模109+7的余数. 输入 一个整数 n (1 ≤ n ≤ 100). 输出 n 位非法二进制数的数目模109+7的余数. 样例输入 3 样例输

hihocoder -1283 hiho密码(水题)

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho根据最近在密码学课上学习到的知识,开发出了一款hiho密码,这款密码的秘钥是这样生成的:对于一种有N个字母的语言,选择一个长度为M的单词:将组成这个单词的所有字母按照顺序不重复的写出(即遇到相同字母时跳过):然后将字母表剩下的没有使用过的字母按照顺序在其后进行排列. 如对于有5个字母的hiho语,选择单词1, 2, 2, 4, 3(此处数字表示字母在字母表中的顺序),则秘钥为1,2,4,3,5. 但是有一天小Ho

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

题目链接:http://hihocoder.com/problemset/problem/1331 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 我们都知道二进制数的每一位可以是0或1.有一天小Hi突发奇想:如果允许使用数字2会发生什么事情?小Hi称其为扩展二进制数,例如(21)ii = 2 * 21 + 1 = 5, (112)ii = 1 * 22 + 1 * 21 + 2 = 8. 很快小Hi意识到在扩展二进制中,每个数的表示方法不是唯一的.例如8还可以有(

[hihoCoder]HIHO Drinking Game

hiho 69周挑战 题解 关键不要纠结于T是什么. 观察发现,T越大,最后Ho的得分越高.对于任意的T,Ho的得分很容易计算.那么二分查找之就好了. 注意,T = K时,不一定能保证Ho一定赢.若输入全是K,那么Ho就输了. #include <iostream> using namespace std; int N, K; int *d; //O(n) int ho_score(int T) { int res = 0; int volume = 0; for (int i = 0; i&