LightOJ1105 Fi Binary Number(数位DP)
2024-10-13 05:53:23
题目要求第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 ;
}
最新文章
- Netruon 理解(11):使用 NAT 将 Linux network namespace 连接外网
- 【MongoDB】C#中的Mongo数据类型转换
- vim操作
- 使用for( var each in record){} 去寻找object里面的内容;
- Wilcoxon test
- poj 1338 Ugly Numbers
- Mysql笔记——DML
- Python--动态类型
- Linux下高效编写Shell——shell特殊字符汇总
- 使用Hadoop的MapReduce与HDFS处理数据
- Weex-进阶笔记一
- Android:SQLite无法update/insert/delete数据(数据库被locked)
- 【树莓派】h2数据库操作相关
- Shiro 核心功能案例讲解 基于SpringBoot 有源码
- linux下安装软件
- GRUB与Linux系统修复(第二版)
- Qt中绘制五子棋棋盘
- equals方法和==的区别--用实例简单说明
- Holer实现外网访问本地MySQL数据库
- 转:JavaBean 、 Serverlet 总结
热门文章
- [Effective JavaScript 笔记]第26条:使用bind方法实现函数的柯里化
- [BZOJ4530][Bjoi2014]大融合 LCT + 启发式合并
- 从零开始写一个武侠冒险游戏-8-用GPU提升性能(3)
- Java报错原因汇总
- Windows下的git配置
- 【SpringMVC】SpringMVC系列2之@RequestMapping 映射约束请求
- 《转》常用Petri网模拟软件工具简介
- 3Sum Closest &; 3Sum Smaller
- div隐藏
- Windows下的cmd命令行中设置环境编码