POJ 3252 Round Numbers
2016-07-22 20:37
274 查看
题目分析
找到2个给定的数之间二进制的表示中0比一大的个数。平时的数位dp用十进制进行分解,得到每一位的10进制数,这道题很明显按2进制进行分解就可以了,但是需要前导0要进行特别的判断,比如000101,前面的3个0很明显是不需要算进去的,在记忆化搜索是多加一个变量就可以了。#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 35; int dp[maxn][maxn][maxn],bit[maxn]; int dfs(int pos,int one,int zero,int flag,int limit){ if(pos < 1) return one <= zero; if(!limit && dp[pos][one][zero] != -1) return dp[pos][one][zero]; int ret = 0; int len = limit?bit[pos]:1; for(int i = 0; i <= len; i++){ ret += dfs(pos-1, i==1?one+1:one, !flag&&(i==0)?zero+1:zero, flag&&(i==0), limit&&i==len); } if(!limit) dp[pos][one][zero] = ret; return ret; } int solve(int n){ int len = 0; while(n){ bit[++len] = n%2; n /= 2; } return dfs(len, 0, 0, 1, 1); } int main(){ int a,b; memset(dp, -1, sizeof(dp)); while(scanf("%d%d", &a, &b) != EOF){ printf("%d\n", solve(b) - solve(a-1)); } return 0; }
相关文章推荐
- 2016/07/22 Var变量声明、window的宽高属性、disable属性设置、过滤器
- 公共jquery库/常用前端公共库CDN服务推荐
- CodeForces 489A SwapSort (选择排序法)
- Java NIO使用及原理分析 (一)
- android studio recyclerview基础 自定义列表样式
- css属性书写顺序分析
- POJ 2069 Super Star
- hdu5724Chess+SG博弈
- Dialogs(对话框)
- r语言之矩形树状图
- (POJ1325)Machine Schedule(二部图最大匹配)
- Java设计模式-工厂模式
- 8086汇编语言自学经验分享 新手汇编源代码---多段实例
- scanf()函数
- 基础知识
- CSVs in Python
- 【杭电2124】Repair the Wall
- Java调用C++ API完整示例(dll)
- NYOJ263精挑细选
- Java wait(long arg)方法的使用