博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Amount of Degrees(数位dp)
阅读量:5138 次
发布时间:2019-06-13

本文共 853 字,大约阅读时间需要 2 分钟。

题目链接:

思路:考虑二进制数字的情况,可以写成一个二叉树的形式,然后考虑区间[i……j]中满足的个数=[0……j]-[0……i-1]。

所以统计树高为i,中有j个1的数的个数。

对于一个二进制数字,求出每次向右转时的左子树内的个数。

对于非二进制数字,就转换为二进制数字后再求解。

#include
#include
#include
using namespace std;const int maxn = 120;int dp[maxn][maxn];typedef long long LL;void Init() //初始化,dp[i][j]代表高度为i的二进制树中恰好有j个1的数的个数 { dp[0][0]=1; for(int i=1;i<=31;i++){ dp[i][0]=dp[i-1][0]; for(int j=1;j<=i;j++) dp[i][j]=dp[i-1][j]+dp[i-1][j-1]; }}int change(int x,int b) //b进制转换为2进制 { int tot=0,ans=0;LL tmp=1; while(tmp*b<=x){ tmp*=b;tot++; } while(tmp){ if(x>=tmp){ ans+=(1<
0;i--){ if(x&(1<
k) break; x=x^(1<
View Code

 

转载于:https://www.cnblogs.com/2018zxy/p/10328338.html

你可能感兴趣的文章
[EMSE'17] A Correlation Study between Automated Program Repair and Test-Suite Metrics
查看>>
HDOJ-2084 数塔问题[DP入门]
查看>>
ubuntu下安装zsh + oh my zsh
查看>>
NAND Flash基本原理
查看>>
Word无法启动转换器
查看>>
【管理工具】Kerberos简单应用
查看>>
andoid电阻触摸移植
查看>>
UML之序列图
查看>>
js问答十题
查看>>
Android中AudioManager 音量的类的方法
查看>>
常用SQL语句
查看>>
NPOI 替换word模版
查看>>
MySQL数据库缓存操作
查看>>
ABP总体介绍 - 入门介绍(一)
查看>>
MYSQL数据库实验(存储过程与触发器)
查看>>
ios 常用第三方库
查看>>
如何快速选择最合适的物体检测框架:一个基于深度学习物体检测算法的简单测评...
查看>>
周五的内容
查看>>
今天的收获
查看>>
PowerDesigner建模应用(一)逆向工程,配置数据源并导出PDM文件
查看>>