POJ 3252 Round Numbers【数位dp+lead使用】
来源:互联网 发布:淘宝天猫店铺怎么申请 编辑:程序博客网 时间:2024/05/18 14:23
source:
USACO 2006 November Silver
题意:统计一段区间的数中二进制表示下0的个数≥1的个数的数有多少个。
思路:数位dp,只是之前的dfs中只需考虑状态和limit边界,而此问题中需要引入前导0的考虑(前导0当然不计入0的个数中),用变量lead表示是否前一位是前导0,用法跟limit一样一样的。
代码如下:
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int a[40];long long dp[40][80];long long dfs(int pos,int dif,int lead,int limit){ if(pos==-1) if(dif>=40) return 1; else return 0; if(!limit && !lead && dp[pos][dif]!=-1) return dp[pos][dif]; int up=limit?a[pos]:1; long long ans=0; for(int i=0;i<=up;i++) { if(i==0 && lead) ans+=dfs(pos-1,dif,1,limit&&i==up); else if(i==0) ans+=dfs(pos-1,dif+1,0,limit&&i==up); else ans+=dfs(pos-1,dif-1,0,limit&&i==up); } if(!limit && !lead) dp[pos][dif]=ans; return ans;}long long f(int x){ int i=0; while(x>0) { a[i++]=x%2; x=x/2; } return dfs(i-1,40,1,1);}int main(){ int l,r; scanf("%d%d",&l,&r); memset(dp,-1,sizeof(dp)); printf("%lld",f(r)-f(l-1)); return 0;}
阅读全文
0 0
- POJ 3252 Round Numbers【数位dp+lead使用】
- POJ 3252 Round Numbers 数位DP
- poj 3252 Round Numbers (数位DP)
- poj 3252 Round Numbers(数位dp)
- POJ 3252 Round Numbers (数位DP)
- poj 3252 Round Numbers(数位dp)
- Round Numbers - POJ 3252 数位dp
- 【数位DP】【poj 3252】Round Numbers
- poj 3252 Round Numbers 数位dp
- POJ 3252 Round Numbers (数位DP)
- POJ 3252 round numbers(数位DP)
- 【数位DP】POJ 3252 Round Numbers
- POJ 3252 Round Numbers 数位dp(入门
- poj 3252 Round Numbers(数位dp)
- POJ 3252 Round Numbers(数位DP)
- POJ 3252 Round Numbers (简单数位DP)
- POJ 3252 Round Numbers(数位dp)
- POJ 3252 Round Numbers (数位dp)
- 4.10 leetcode -10 triangle
- STORM入门之(Worker、Executor、Task之间的关系)
- HDU 产生冠军 2094
- Bitmap保存到SD
- 2D图形变换原理浅析
- POJ 3252 Round Numbers【数位dp+lead使用】
- Linux网路编程网络基础之网络‘协议的概念
- Redhat7.2和Redhat6.5配置本地yum源和网络yum源
- C标准库函数strncpy用法解析
- html学习2
- 集合(二)
- 【17/8】android按钮的四种点击事件
- 常用的mysql语句
- MySQL主从架构配置