poj 3252 Round Numbers 数位dp
来源:互联网 发布:10月份经济数据2017 编辑:程序博客网 时间:2024/05/16 18:01
题意:
Round Numbers:把一个数分解成二进制,0的个数>=1的个数的数
分析:
显然数位dp可解,这题用排列组合也能做。不过还是数位dp简单点。
排列组合可以参考Kuangbin巨巨的题解:http://www.cnblogs.com/kuangbin/archive/2012/08/22/2651730.html
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;const int N=50;int f[N][N][N];int bit[50];int dfs(int pos,int num0,int num1,bool lim,bool first){ if(pos==0)return num0>=num1; if(!lim&&f[pos][num0][num1]!=-1)return f[pos][num0][num1]; int ans=0; int m=lim?bit[pos]:1; for(int i=0;i<=m;i++){ if(i==0){ if(!first)ans+=dfs(pos-1,0,0,0,0); else ans+=dfs(pos-1,num0+1,num1,lim&&i==m,first); } if(i==1){ if(!first)ans+=dfs(pos-1,0,1,lim,1); else ans+=dfs(pos-1,num0,num1+1,lim,1); } } if(!lim)f[pos][num0][num1]=ans; return ans;}int solve(int x){ int cnt=0; while(x){ bit[++cnt]=x&1; x>>=1; } return dfs(cnt,0,0,1,0);}int main(){ //freopen("f.txt","r",stdin); memset(f,-1,sizeof(f)); int s,t; scanf("%d%d",&s,&t); printf("%d\n",solve(t)-solve(s-1)); return 0;}
0 0
- 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)
- 数位DP-POJ-3252-Round Numbers
- JS调试技巧
- nyoj 760 See LCS again 最长公共子序列
- sg-uap常用注解介绍
- CI数据库备份与还原入门小例子
- Git常用命令与Git for windows solarized主题配置
- poj 3252 Round Numbers 数位dp
- IDA经典教程
- Grpc的一个简单的负载均衡类库
- 修改Struts2的struts.xml配置文件位置和名称-重点是init-param参数用来切换加载的路径
- Struts 2 常用标签(Tag)详解
- Android--微信支付的坑
- 进程实践——myshell
- Spring MVC 简介
- 嵌入式技能点