B. Fi Binary Number

 
 

A Fi-binary number is a number that contains only 0 and 1. It does not contain any leading 0. And also it does not contain 2 consecutive 1. The first few such number are 1, 10, 100, 101, 1000, 1001, 1010, 10000, 10001, 10010, 10100, 10101 and so on. You are given n. You have to calculate the nth Fi-Binary number.

 

Input

Input starts with an integer T (≤ 10000), denoting the number of test cases.

Each case contains an integer n (1 ≤ n ≤ 109).

 

Output

For each case, print the case number and the nth Fi-Binary number

 

Sample Input

Sample Input

Output for Sample Input

4

10

20

30

40

Case 1: 10010

Case 2: 101010

Case 3: 1010001

Case 4: 10001001

题意:给你一个01串满足:没有前置0,任意两个1不能相邻,问你第n个这样的数是多少

题解:这是一种dp思想,  假设最高位是1,那么次高位必须是0,那么有  f[i]=f[i-1]+f[i-2];

得出来是一个fibonacci数列 打表暴力可求解

///
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll;
#define mem(a) memset(a,0,sizeof(a))
#define meminf(a) memset(a,127,sizeof(a))
#define TS printf("111111\n")
#define FOR(i,a,b) for( int i=a;i<=b;i++)
#define FORJ(i,a,b) for(int i=a;i>=b;i--)
#define READ(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define inf 100000
inline ll read()
{
ll x=,f=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-')f=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=x*+ch-'';
ch=getchar();
}
return x*f;
}
//**************************************** #define maxn 1111
ll f[maxn],sum[maxn];
void init()
{
f[]=;
f[]=;;sum[]=;sum[]=;
for(int i=;i<=;i++)
f[i]=f[i-]+f[i-],sum[i]=sum[i-]+f[i-]; }
int main()
{
init();
int T=read();
int oo=;
while(T--)
{
ll n=read();printf ("Case %d: ",oo++);
bool flag=;
for(int i=;i>=;i--)
{
if(n>sum[i])
{
n-=sum[i]+;
cout<<;
flag=;
}
else if(flag){ cout<<;
}
}cout<<endl; }
return ;
}

fibonacci

还可以这样想:  定义dp[i][p]表示长度i 第i+1为p的方案数,那么这题就是一个数位dp了
///
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll;
#define mem(a) memset(a,0,sizeof(a))
#define meminf(a) memset(a,127,sizeof(a))
#define TS printf("111111\n")
#define FOR(i,a,b) for( int i=a;i<=b;i++)
#define FORJ(i,a,b) for(int i=a;i>=b;i--)
#define READ(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define inf 1000000001
inline ll read()
{
ll x=,f=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-')f=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=x*+ch-'';
ch=getchar();
}
return x*f;
}
//**************************************** #define maxn 50
ll dp[maxn][];
ll num[maxn];
int dfs(int i,int p)
{
if(dp[i][p])return dp[i][p];
if(i<)return ;
int ret=;
if(p) ret=dfs(i-,);
else ret=dfs(i-,)+dfs(i-,);
dp[i][p]=ret;
return ret;
}
void get(int n)
{
bool flag=;
for(int i=;i>;i--)
{
if(n>=num[i])
{
n-=num[i];
cout<<;
flag=;
}
else if(flag)cout<<;
}
}
int main()
{
mem(dp);
for(int i=;i<=;i++)num[i]=dfs(i-,);
cout<<num[]<<endl;
// cout<<dp[1][0]<<endl;
int T=read();
int oo=;
while(T--)
{
int n=read();
printf("Case %d: ",oo++);
get(n);cout<<endl;
}
return ;
}

数位dp

BNU 13024 . Fi Binary Number 数位dp/fibonacci数列的更多相关文章

  1. lightoj 1105 - Fi Binary Number(dp+思维(斐波那契))

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1105 题解:这题你会巧妙的发现 1-(1),2-(10),3-(100),5- ...

  2. 多校5 HDU5787 K-wolf Number 数位DP

    // 多校5 HDU5787 K-wolf Number 数位DP // dp[pos][a][b][c][d][f] 当前在pos,前四个数分别是a b c d // f 用作标记,当现在枚举的数小 ...

  3. LightOJ1105 Fi Binary Number(数位DP)

    题目要求第k个没有连续两个1的二进制数. 这算数位DP吧,只不过以前遇到的是统计区间的数字情况,而这题是求第几个数字,差不多是反过来的. 本来我想用状态dp[i][0/1]表示长度i末尾0或1的二进制 ...

  4. hdu 5898 odd-even number 数位DP

    传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...

  5. codeforces Hill Number 数位dp

    http://www.codeforces.com/gym/100827/attachments Hill Number Time Limits:  5000 MS   Memory Limits: ...

  6. HDU 5787 K-wolf Number 数位DP

    K-wolf Number Problem Description   Alice thinks an integer x is a K-wolf number, if every K adjacen ...

  7. Fzu2109 Mountain Number 数位dp

    Accept: 189    Submit: 461Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description One ...

  8. HDU 3709 Balanced Number (数位DP)

    Balanced Number Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  9. beautiful number 数位DP codeforces 55D

    题目链接: http://codeforces.com/problemset/problem/55/D 数位DP 题目描述: 一个数能被它每位上的数字整除(0除外),那么它就是beautiful nu ...

随机推荐

  1. 如何做到在webpack打包vue项目后,在外部动态修改配置文件

    在我们做完vue项目后,只需要执行 npm run dist 就可以轻松进行打包转测试,可是如果我们临时需要修改一些配置文件比如域名,这时候我们就有点懵逼了,那就修改了再重新打一次包? NO NO N ...

  2. 学习笔记——网络编程3(基于TCP协议的网络编程)

    TCP协议基础 IP协议是Internet上使用的一个关键协议,它的全称是Internet Protocol,即Internet协议,通常简称IP协议.   使用ServerSocket创建TCP服务 ...

  3. java.net.MalformedURLException: no protocol: www.baidu.com

    URL url = new URL("www.baidu.com");改为 URL url = new URL("http://www.baidu.com");

  4. Gym - 101550A(Artwork 倒序+并查集)

    题目: 思路: 1.对输入数据离线,先把所有的黑线都画出来,统计一下剩余的白色连通块的个数,dfs过程将一个连通块放到一个集合中. 2.倒着往前消去黑线,如果当前的块A是白块就看他的四周有没有白块:有 ...

  5. config对象的使用及常用方法

    config对象的使用及常用方法 制作人:全心全意 config对象主要用于取得服务器的配置信息.通过pageContext对象的getServletConfig()方法可以获取一个config对象. ...

  6. 将node-webkit打包后文件用nsis再打包成安装包

  7. 【模板】网络流-最大流 Dinic

    洛谷 3376 #include<cstdio> #include<algorithm> #include<cstring> #define N 10010 #de ...

  8. 【01】CSS3 Gradient 分为 linear-gradient(线性渐变)和 radial-gradient(径 向渐变)(转)

    CSS3 Gradient 分为 linear-gradient(线性渐变)和 radial-gradient(径 向渐变).而我们今天主要是针对线性渐变来剖析其具体的用法.为了更好的应用 CSS3 ...

  9. https://gitee.com/tomsun28/bootshiro-------需要研究的项目

    https://gitee.com/tomsun28/bootshiro-------需要研究的项目

  10. noip模拟赛 业务办理

    [问题描述]在银行柜台前,有 n 个顾客排队办理业务. 队伍中从前往后,第 i 位顾客办理业务需要ti 分钟时间. 一位顾客的等待时间定义为:队伍中在他之前的所有顾客和他自己的办理业务时间的总和.第 ...