扩展二进制数
来源:互联网 发布:英雄联盟盒子mac版 编辑:程序博客网 时间:2024/05/20 02:51
1.题目描述
传送门
2.code(c++版本)
#include<iostream>using namespace std;int dp[64][3][2]={0};int num[64]={0};int N;int dfs(int i,int j,int k){ if(i==0){ if(k==0)return 1; else return 0; } if(dp[i][j][k]!=0){ return dp[i][j][k]; } else{ if(2*k+num[i-1]-0<=1&&2*k+num[i-1]-0>=0){ dp[i][j][k]+=dfs(i-1,0,2*k+num[i-1]-0); } if(2*k+num[i-1]-1<=1&&2*k+num[i-1]-0>=0){ dp[i][j][k]+=dfs(i-1,1,2*k+num[i-1]-1); } if(2*k+num[i-1]-2<=1&&2*k+num[i-1]-0>=0){ dp[i][j][k]+=dfs(i-1,2,2*k+num[i-1]-2); } } return dp[i][j][k];}int main(){ while(cin>>N){ int ans=0; int m=0; while(N){ num[m]=N&1; N>>=1; m++; } ans=dfs(m-1,0,num[m-1]-0)+dfs(m-1,1,num[m-1]-1); cout<<ans<<endl; } return 0;}
3.题目分析
这道题目是一道数位dp的题目,首先建立一个dp[64][3][2]这样的数组,dp[i][j][k]表示在i位填写j余下k需要填写时的总的扩展二进制数表示方法,递归到对底层时终止对的条件为i==0,k==0,这时返回1,如果k!=0,返回0,这样dp操作即可完成所有的情况的记录。
阅读全文
0 0
- 扩展二进制数
- 扩展二进制数
- hihocoder #1331 : 扩展二进制数
- 二进制数位数扩展方法
- hihocoder #1331扩展二进制数
- hihoCoder1331—扩展二进制数
- hiho一下 第168周 扩展二进制数
- hiho一下第168周 扩展二进制数
- hiho一下 第168周 扩展二进制数
- 扩展二进制数 hiho一下第168周
- 二进制数
- 二进制数
- 《编程之美》读书笔记(二):“求二进制数中1的个数”扩展问题
- 初学汇编之第三个程序(扩展一个二进制数)
- 扩展解释:编程之美 求二进制数中1的个数
- 编程之美求二进制数中1的个数扩展题
- 编程之美2.1求二进制数中1的个数及扩展问题Java版
- hihoCode太阁最新面经算法6——扩展二进制数
- 大型网站架构技术一览
- hihocoder #1114 扫雷一
- 二叉查找树、平衡二叉树、红黑树、B-/B+树性能对比
- Java多线程笔记二(synchronized的使用以及实现原理)
- 图文混排
- 扩展二进制数
- gcc指定链接库路径后还是找不到库文件
- 寻找k个数组的最小区间
- 10:判决素数个数(1.13编程基础之综合应用)
- poj1006 Biorhythms(CRT)
- Floyd Warshell 算法求解多源点最短路径
- 题目41-三个数从小到大排序
- 鸡蛋队列
- 十五、bootstrap-table editable