题目要求第k个没有连续两个1的二进制数。

这算数位DP吧,只不过以前遇到的是统计区间的数字情况,而这题是求第几个数字,差不多是反过来的。

本来我想用状态dp[i][0/1]表示长度i末尾0或1的二进制数个数,发现这样好像没法解。

最后需要根据数位DP状态的值推算出要求二进制数各个位置是0还是1,这个肯定是从高位到低位确定——所以应该反过来表示状态:

dp[i][0/1]:长度i开头为0或1的二进制数个数

最后的求解:

  • 先利用dp[i][1]的值确定出要求二进制的位数
  • 位数知道后,最高位得是1
  • 最后就从高到低根据 前一位是0还是1、dp[i][0]的值和剩下的个数的关系 一位位确定。
 #include<cstdio>
#include<cstring>
using namespace std;
#define MAXL 100
int d[MAXL][];
int main(){
d[][]=;
for(int i=; i<; ++i){
d[i][]=d[i-][]+d[i-][];
d[i][]=d[i-][];
}
int t,n;
scanf("%d",&t);
for(int cse=; cse<=t; ++cse){
scanf("%d",&n);
int len=;
while(n>d[len][]){
n-=d[len][];
++len;
}
printf("Case %d: 1",cse);
int last=;
for(int i=; i<len; ++i){
if(last==){
putchar('');
last=;
}else if(n>d[len-i][]){
n-=d[len-i][];
putchar('');
last=;
}else{
putchar('');
last=;
}
}
putchar('\n');
}
return ;
}

最新文章

  1. Netruon 理解(11):使用 NAT 将 Linux network namespace 连接外网
  2. 【MongoDB】C#中的Mongo数据类型转换
  3. vim操作
  4. 使用for( var each in record){} 去寻找object里面的内容;
  5. Wilcoxon test
  6. poj 1338 Ugly Numbers
  7. Mysql笔记——DML
  8. Python--动态类型
  9. Linux下高效编写Shell——shell特殊字符汇总
  10. 使用Hadoop的MapReduce与HDFS处理数据
  11. Weex-进阶笔记一
  12. Android:SQLite无法update/insert/delete数据(数据库被locked)
  13. 【树莓派】h2数据库操作相关
  14. Shiro 核心功能案例讲解 基于SpringBoot 有源码
  15. linux下安装软件
  16. GRUB与Linux系统修复(第二版)
  17. Qt中绘制五子棋棋盘
  18. equals方法和==的区别--用实例简单说明
  19. Holer实现外网访问本地MySQL数据库
  20. 转:JavaBean 、 Serverlet 总结

热门文章

  1. [Effective JavaScript 笔记]第26条:使用bind方法实现函数的柯里化
  2. [BZOJ4530][Bjoi2014]大融合 LCT + 启发式合并
  3. 从零开始写一个武侠冒险游戏-8-用GPU提升性能(3)
  4. Java报错原因汇总
  5. Windows下的git配置
  6. 【SpringMVC】SpringMVC系列2之@RequestMapping 映射约束请求
  7. 《转》常用Petri网模拟软件工具简介
  8. 3Sum Closest &amp; 3Sum Smaller
  9. div隐藏
  10. Windows下的cmd命令行中设置环境编码