Usaco 2006Nov Round Numbers
题意:定义Round Number为二进制表示下0的个数大于等于1的个数的数。求[l,r]中有多少圆环数
我们把二进制位用一颗01二叉树表示,如下:

我们依据二进制位来遍历这颗线段树,如果当前高度对应的位为1,则遍历左右两颗子树,否则遍历左子树。dfs的过程中我们可以用记忆化来减少枚举状态,同时注意到那些最靠左的子树在遍历的过程中是可以重计数的,这样可以减少需要枚举的状态
尽管据说此题是裸的数位dp,可是我还是不会呀QAQ
#include<bits/stdc++.h>
using namespace std;
int f[][][],s[];
int dfs(int all,int c1,int c2,int f1,int f2){
if(!all){
if(c1>=c2)return ;
return ;
}
if(!f1&&!f2&&f[all][c1][c2]!=-)return f[all][c1][c2];
int tot=,last=f2?s[all]:;
for(int i=;i<=last;i++){
if(f1){
if(!i)tot+=dfs(all-,,,,f2&&(i==s[all]));
else tot+=dfs(all-,c1,c2+,,f2&&(i==s[all]));
}
else{
if(!i)tot+=dfs(all-,c1+,c2,,f2&&(i==s[all]));
else tot+=dfs(all-,c1,c2+,,f2&&(i==s[all]));
}
}
if(!f1&&!f2)f[all][c1][c2]=tot;
return tot;
}
int sum(int x){
int tot=;
memset(s,,sizeof(s));
for(;x;x>>=)s[++tot]=x&;
return dfs(tot,,,,);
}
int main(){
memset(f,-,sizeof(f));
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",sum(r)-sum(l-));
return ;
}
Usaco 2006Nov Round Numbers的更多相关文章
- POJ 3252 Round Numbers
组合数学...(每做一题都是这么艰难) Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7607 A ...
- Round Numbers(组合数学)
Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10484 Accepted: 3831 Descri ...
- [ACM] POJ 3252 Round Numbers (的范围内的二元0数大于或等于1数的数目,组合)
Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8590 Accepted: 3003 Des ...
- 4-圆数Round Numbers(数位dp)
Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14947 Accepted: 6023 De ...
- POJ3252 Round Numbers —— 数位DP
题目链接:http://poj.org/problem?id=3252 Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Su ...
- poj3252 Round Numbers(数位dp)
题目传送门 Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16439 Accepted: 6 ...
- 题解【POJ3252】Round Numbers
Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, P ...
- 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP
[BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...
- [BZOJ1662][POJ3252]Round Numbers
[POJ3252]Round Numbers 试题描述 The cows, as you know, have no fingers or thumbs and thus are unable to ...
随机推荐
- Linux crontab定时器设置(定期执行java程序)(转)
Crontab 语法 Crontab语法一个crontab文件用五个段来定义:天,日期和时间,和一个要定期执行的命令代码. * * * * * command to be execut ...
- 2017CCPC秦皇岛G ZOJ 3987Numbers(大数+贪心)
Numbers Time Limit: 2 Seconds Memory Limit: 65536 KB DreamGrid has a nonnegative integer n . He ...
- StringDup(理论AC)
Problem Statement for StringDup Problem Statement Create a class called StringDup. Given a stri ...
- Brave Game(裸的巴什博弈)
Brave Game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- 暑假练习赛 007 A - Time
A - Time Description standard input/outputStatements A plane can go from city X to city Y in 1 hour ...
- 爱pia戏推出PC客户端,为您自动置顶窗口,方便查找
爱pia戏推出PC客户端, 可以在无法使用插件的时候,使用PC客户端, 将为您自动置顶窗口,方便查看剧本. 百度网盘下载地址: 链接: http://pan.baidu.com/s/1pLpvn5p ...
- python3 selenium模拟登陆斗鱼提取数据保存数据库
# coding=utf-8from selenium import webdriverimport jsonimport timeimport pymongo class Douyu: def __ ...
- 《Linux命令行与shell脚本编程大全》 第六章环境变量
很多程序和脚本都通过环境变量来获取系统信息.存储临时数据和配置信息. 6.1 什么是环境变量: bash shell用一个叫环境变量(environment variable)的特性来存储有关shel ...
- HTML5对音视频的处理
前 言 现在网上有许多的框架和插件,能够满足程序猿的各种需求,慢慢的,就有些忽视最基础的东西. 比如,大多数视频是通过插件(比如 Flash)来显示的.然而,并非所有浏览器都拥有同样的插件. H ...
- Java中Date日期字符串格式的各种转换
public class DateParserT { /** * Date 与 String.long 的相互转换 * @param args ...