Round Numbers poj3252

    题目大意:求一段区间内Round Numbers的个数。

    注释:如果一个数的二进制表示中0的个数不少于1的个数,我们就说这个数是Round Number.给定区间l,r<=$2\cdot 10^9$。

      想法:又是一道数位dp裸题。我们先来设状态:dp[i]表示二进制表示下有i为而且第一位是1的Round Number的个数。

        这题的特殊之处在于我们并不需要转移?因为我们可以直接求出任意的dp[i]。显然,我们的i位数的第一位是1,所以,后面0的个数一定不能少于(i-1)/2+1.我们在后面的i-1位当中去组合数即可。

      然后,我们思考数位dp的边界:对于一个数来讲,我们可以将所有的位数小于tot的dp全部加起来(tot是该数的二进制表示下的位数)。然后,我们显然只需要对于这个数的二进制从左到右枚举:弄两个计数器分别记录之前经过了多少个0.对于当前数码,如果是0,略过即可。如果是1,则在它之后所有满足该位是0前面满足的数的Round Number都是满足条件的Round Number。,统计即可。

    最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int C[33][33];
void before_hand()//预处理组合数
{
C[0][0]=1;
C[1][0]=1;C[1][1]=1;
for(int i=2;i<33;i++)
{
C[i][0]=1;
for(int j=1;j<i;j++)
C[i][j]=C[i-1][j-1]+C[i-1][j];
C[i][i]=1;
}
}
int bits[33];
int dispose(int n)
{
if(n<=1) return 0;
int tot=0;
while(n>0)//二进制拆分
{
if(n&1) bits[tot++]=1;
else bits[tot++]=0;
n>>=1;
}
int ans=0;
for(int i=tot-1;i>0;i--)//将位数小于tot的全部加一起
{
if(i%2==0)
ans+=((1<<(i-1)))/2;
else
ans+=((1<<(i-1))-C[i-1][(i-1)/2])/2;
}
int count_for_0=0,count_for_1=0;//两个计数器(字面意思)
for(int i=0;i<tot;i++)
{
if(bits[i]==0) count_for_0++;
else count_for_1++;
}
if(count_for_0>=count_for_1) ans++;
count_for_0=0;
count_for_1=1;
for(int i=tot-2;i>=0;i--)
{
if(bits[i]==1)
{
for(int j=i;j>=0&&j+count_for_0+1>=i-j+count_for_1;j--)
ans+=C[i][j];//简单点儿来说就是直接统计后面的dp值
count_for_1++;
}
else count_for_0++;//如果是0,就直接增加计数器
}
return ans;
} int main()
{
before_hand();
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
printf("%d\n",dispose(b)-dispose(a-1));//防止重叠
}
return 0;
}

    小结:数位dp的恶心之处就是边界特判,沉下心来写一写,不行就把代码拿去copy算了,毕竟这道题的本质不是代码... ...

[poj3252]Round Numbers_数位dp的更多相关文章

  1. POJ3252 Round Numbers —— 数位DP

    题目链接:http://poj.org/problem?id=3252 Round Numbers Time Limit: 2000MS   Memory Limit: 65536K Total Su ...

  2. poj3252 Round Numbers (数位dp)

    Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, P ...

  3. poj3252 Round Numbers[数位DP]

    地址 拆成2进制位做dp记搜就行了,带一下前导0,将0和1的个数带到状态里面,每种0和1的个数讨论一下,累加即可. WA记录:line29. #include<iostream> #inc ...

  4. 【poj3252】 Round Numbers (数位DP+记忆化DFS)

    题目大意:给你一个区间$[l,r]$,求在该区间内有多少整数在二进制下$0$的数量$≥1$的数量.数据范围$1≤l,r≤2*10^{9}$. 第一次用记忆化dfs写数位dp,感觉神清气爽~(原谅我这个 ...

  5. poj 3252 Round Numbers(数位dp 处理前导零)

    Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, P ...

  6. POJ 3252 Round Numbers(数位dp&amp;记忆化搜索)

    题目链接:[kuangbin带你飞]专题十五 数位DP E - Round Numbers 题意 给定区间.求转化为二进制后当中0比1多或相等的数字的个数. 思路 将数字转化为二进制进行数位dp,由于 ...

  7. poj 3252 Round Numbers 数位dp

    题目链接 找一个范围内二进制中0的个数大于等于1的个数的数的数量.基础的数位dp #include<bits/stdc++.h> using namespace std; #define ...

  8. $POJ$3252 $Round\ Numbers$ 数位$dp$

    正解:数位$dp$ 解题报告: 传送门$w$ 沉迷写博客,,,不想做题,,,$QAQ$口胡一时爽一直口胡一直爽$QAQ$ 先港下题目大意嗷$QwQ$大概就说,给定区间$[l,r]$,求区间内满足二进制 ...

  9. 4-圆数Round Numbers(数位dp)

    Round Numbers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14947   Accepted: 6023 De ...

随机推荐

  1. Android WebView的缓存方式分析

    WebView的缓存可以分为(1)页面缓存和(2)数据缓存. 页面缓存是指当WebView加载一个网页时的html.JS.CSS等页面或者资源数据.这些缓存资源是由于浏览器的行为而产生,开发者只能通过 ...

  2. 【html5】html5离线存储

    html5本地存储之离线存储 1.为什么使用离线存储 ①最新的主流的浏览器中都已添加了对HTML5的offline storage功能的支持,HTML5离线存储功能非常强大, 它的作用是:在用户没有与 ...

  3. 小白学爬虫-设置Selenium+Chrome代理

    微博登录限制了错误次数···加上Cookie大批账号被封需要从Cookie池中 剔除被封的账号··· 需要使用代理··· 无赖百度了大半天都是特么的啥玩意儿???结果换成了 Google手到擒来 分分 ...

  4. CentOS配置samba服务

    1.服务器需要下载samba.sambaclient包 yum install samba samba-client -y 2.客户端需要下载samba-client.cifs-utils包 yum ...

  5. Docker学习——Lepus部署

    Lepus部署(基于docker)及mysql慢查询配置 介绍 Lepus是一个由Python+PHP开发的数据库企业级监控系统,可用于MySQL/Oracle/MongoDB/Redis 下载镜像 ...

  6. C#多线程编程(4)--异常处理+前三篇的总结

    本来是打算讲并行For和PLINQ的,但是我感觉前三篇我没有讲得很清晰.之前一直在看<CLR via C#>(后文简称CLR)的多线程部分,其中有些部分不是很明白,今天翻开<果壳中的 ...

  7. 空间主页播放任意FLV格式视频方法

      把文件上传到QQ网络硬盘 打开 硬盘 的 管理 选项 然后它会打开QQ邮箱的文件中转站 找到你要的视频文件 点击下载它 这里建议你使用搜狗浏览器打开网页 来到下载按钮点击下载,在弹出的对话框中选择 ...

  8. 【BZOJ3262】陌上花开(树套树)

    [BZOJ3262]陌上花开(树套树) 题面 对于权限题,我这种苦逼肯定是从别的OJ上搞的对不对??? CJOJ 洛谷 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味 ...

  9. Cow Contest POJ - 3660

    题意 有n(1<=n<=100)个学生参加编程比赛. 给出m条实力信息.(1<=M<=4500) 其中每一条的格式为 A B (1<=A<=N,1<=B< ...

  10. [BZOJ1601] [Usaco2008 Oct] 灌水 (kruskal)

    Description Farmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记.把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水库. ...