Uvalive-4494-(数位dp)
题意:求a->b中的二进制出现过多少个1,很显然的数位dp,对于某一位来说,如果这位是0,那么dp[i]=dp[i-1] 如果这一位是1 那么dp[i]=dp[i-1]+1<<(pos-1)+(后缀+1);
dp[pos][now] /pos表示当前的位,now表示现在是1还是0
#include<bits/stdc++.h> #define inf 0x3f3f3f3f const int maxn=; typedef long long LL; using namespace std; int a,b; int icase; LL dp[maxn+][]; LL dig[maxn+]; int prefix[maxn+]; LL dfs(int pos,int limit,int now,int num){
if(pos<=) return now==;
if(dp[pos][now]!=-&&!limit) return dp[pos][now];
int end=limit?dig[pos-]:;
LL ret=;
if(!limit&&now==) {
ret+=(<<(pos-));
}
if(limit&&now==) {
ret+=(prefix[pos-]+);
}
for(int i=;i<=end;i++){
ret+=dfs(pos-,limit&&(i==end),i,num);
}
if(!limit)
return dp[pos][now]=ret;
else return ret;
} void solve(){
memset(prefix,,sizeof(prefix));
memset(dp,-,sizeof(dp));
memset(dig,,sizeof(dig));
int len=;
int x=a;
int y=b;
while(x){
dig[++len]=x%;
if(x%){
prefix[len]|=(<<(len-));
}
prefix[len]+=prefix[len-];
x/=;
}
LL ans1=;
if(a>)
ans1=dfs(len,,,a)+dfs(len,,,a);
else ans1=;
memset(prefix,,sizeof(prefix));
memset(dig,,sizeof(dig));
memset(dp,-,sizeof(dp));
len=;
while(y){
dig[++len]=y%;
if(y%){
prefix[len]|=(<<(len-));
}
prefix[len]+=prefix[len-];
y/=;
}
LL ans2=;
ans2=dfs(len,,,b)+dfs(len,,,b);
printf("Case %d: %lld\n",++icase,ans2-ans1);
} int main()
{
while(scanf("%d%d",&a,&b)!=EOF&&(a||b)){
a--;
solve();
}
return ;
}
Uvalive-4494-(数位dp)的更多相关文章
- UVALive - 6575 Odd and Even Zeroes 数位dp+找规律
题目链接: http://acm.hust.edu.cn/vjudge/problem/48419 Odd and Even Zeroes Time Limit: 3000MS 问题描述 In mat ...
- UVALive 4877 Non-Decreasing Digits 数位DP
4877 Non-Decreasing Digits A number is said to be made up ofnon-decreasing digitsif all the digits t ...
- UVALive - 6872 Restaurant Ratings 数位dp
题目链接: http://acm.hust.edu.cn/vjudge/problem/113727 Restaurant Ratings Time Limit: 3000MS 题意 给你一个长度为n ...
- 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP
[BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...
- bzoj1026数位dp
基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...
- uva12063数位dp
辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...
- HDU2089 不要62[数位DP]
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 数位DP GYM 100827 E Hill Number
题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...
- 数位dp总结
由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...
- 数位DP入门
HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...
随机推荐
- Memcached HA架构探索
https://code.google.com/p/memagent/ 标签:memcached magent 高可用 HA 架构原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者 ...
- C/C++协程的实现方式总结
1.利用 C 语言的 setjmp 和 longjmp,函数中使用 static local 的变量来保存协程内部的数据. 函数原型:int setjmp(jmp_buf envbuf); void ...
- css书写规则
无规矩不成方圆,不管有多少人共同参与同一项目,一定要确保每一行代码都像是同一个人编写的 不要在自闭合(self-closing)元素的尾部添加斜线 不要省略可选的结束标签(closing tag)(例 ...
- linux 进程学习笔记-运行新进程
我们知道,当用fork启动一个新进程以后,新进程会复制父进程的大部份内存空间并接着运行父进程中的代码,如果我们使新进程不运行原父进程的代码,转而运行另外一个程序集中的代码,这就相当于启动了一个新程序. ...
- jquery新添加元素无法删除
$("body").on('click',".delic",function(){ $(this).parent().remove(); })
- POJ3468 A Simple Problem with Integers(数状数组||区间修改的RMQ问题)
You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of op ...
- .NETFramework-Web.Services:WebMethodAttribute
ylbtech-.NETFramework-Web.Services:WebMethodAttribute 1.程序集 System.Web.Services, Version=4.0.0.0, Cu ...
- 虚拟机ubuntu和windows共享文件
设置虚拟机ubuntu和windows共享文件(方便复制文件到本机) (需要安装samba) 登陆ubuntu系统后,点击左边的文件夹.右击新建个文件夹. 设置为共享 ubuntu会提示你 ...
- [51nod1102]面积最大的矩形(单调栈||预处理)
题意:求序列上某区间最小值乘区间长度的最大值. 解题关键:很早就在<挑战程序设计竞赛>中见过了,单调栈模板题,注意弹栈时如何处理后面的元素. 法一:单调栈 #include<bits ...
- 《Java多线程编程核心技术》读后感(十)
一生产一消费:操作栈 本实例是使生产者向堆栈List对象中放入数据,使消费者从List堆栈中取出数据.List最大容量是1 package Third; import java.util.ArrayL ...