POJ3252Round Numbers(数位DP)
来源:互联网 发布:我友网络 编辑:程序博客网 时间:2024/06/06 13:23
题意:算出区间内二进制中0的个数大于等于1的个数的数字有多少个
#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;#define N 50int dp[N][N][N], bit[N];int dfs(int pos, int num0, int num1, bool pre, bool limit){ if(pos==-1) { return num0>=num1; } if(!limit&&!pre&&dp[pos][num0][num1]!=-1) return dp[pos][num0][num1]; int up=limit?bit[pos]:1; int ret=0; for(int i=0; i<=up; i++) { if(i==0) { if(pre) ret+=dfs(pos-1, num0, num1, pre, limit&&i==up); else ret+=dfs(pos-1, num0+1, num1, pre, limit&&i==up); } else ret+=dfs(pos-1, num0, num1+1, false, limit&&i==up); } if(!limit&&!pre) dp[pos][num0][num1]=ret; return ret;}int solve(int x){ int len=0; while(x) { bit[len++]=x%2; x>>=1; } return dfs(len-1, 0, 0, true, true);}int main(){ int L, R; memset(dp, -1, sizeof(dp)); while(cin>>L>>R) { printf("%d\n", solve(R)-solve(L-1)); } return 0;}
阅读全文
0 0
- poj3252Round Numbers【数位dp】
- POJ3252Round Numbers(数位DP)
- poj3252Round Numbers非递归数位dp解
- poj3252Round Numbers
- poj3252Round Numbers(递归)
- 【数位DP】SPOJ10606Balanced Numbers
- 【数位DP】SPOJ10606Balanced Numbers
- 数位dp Beautiful numbers
- hdu4722Good Numbers数位dp
- SPOJ10606Balanced Numbers(数位DP)
- 数位dp, Beautiful numbers
- Good Numbers (数位DP)
- poj3252Round Numbers(数学问题)
- HDU4722:Good Numbers(数位DP)
- hdu4722 Good Numbers (数位DP)
- 数位DP--HDU4722(Good Numbers)
- hdu4722 Good Numbers 数位dp
- POJ3252 Round Numbers 数位DP
- SVG文本
- Java 执行数据库存储过程,并带返回值
- linux中man前面的代号代表的意义
- Longest Substring Without Repeating Characters
- android的handler机制
- POJ3252Round Numbers(数位DP)
- iOS-80-解决主页tableview顶部多出一块
- css标签大全
- mac 配置jdk环境变量 零碎知识
- Netty之堆外内存
- 牛客 题库 3
- 约瑟夫环递归写法
- 算法总结二
- php数组使用技巧及操作总结