数位dp题,关键是用树的思维去考虑。

对于一个数字X,要是能表示成K个B的不同次幂,等价于X在B进制下有且只有K个位上面的数字为一,其他位上的数字都为0。

具体读者可以去参考,国家集训队李聪的论文,里面的介绍都很详细。

#include<stdio.h>
#include<string.h>
#define LL long long
LL c[60][60];
int K,b,a[40];
void init()//预处理组合数
{
int i,j;
for(i=0;i<40;i++)c[i][0]=c[i][i]=1;
for(i=1;i<40;i++)
for(j=1;j<i;j++)
c[i][j]=c[i-1][j]+c[i-1][j-1];
}
int change(int s)
{
int i,j,len;
memset(a,0,sizeof(a));
for(i=0;s;i++){
a[i]=s%b;
s/=b;
}
len=i;
for(i=len;i>=0;i--){//对于非二进制的处理
if(a[i]>1){
for(j=i;j>=0;j--)a[j]=1;
break;
}
}
return len;
}
int solve(int s)
{
int ans=0;
int i,j;
int len=change(s);
int tot=0;
for(j=len+1;j>0;j--)
{
if(a[j]){
tot++;
if(tot>K)break;
}
if(a[j-1])ans+=c[j-1][K-tot];
}
if(a[0]+tot==K)ans++;//考虑本身
return ans;
}
int main()
{
int i,j,x,y;
init();
while(scanf("%d%d",&x,&y)!=-1)
{
scanf("%d%d",&K,&b);
printf("%d\n",solve(y)-solve(x-1));
}
return 0;
}

ural 1057(数位dp)的更多相关文章

  1. URAL 1057 数位dp

    题目传送门http://acm.timus.ru/problem.aspx?space=1&num=1057 最近在学习数位dp,具体姿势可以参照这篇论文:http://wenku.baidu ...

  2. [转]数位dp小记

    转载自:http://blog.csdn.net/guognib/article/details/25472879 参考: http://www.cnblogs.com/jffifa/archive/ ...

  3. 数位DP 计划

    通常的数位dp可以写成如下形式: [cpp] view plain copy int dfs(int i, int s, bool e) { if (i==-1) return s==target_s ...

  4. Timus Online Judge 1057. Amount of Degrees(数位dp)

    1057. Amount of Degrees Time limit: 1.0 second Memory limit: 64 MB Create a code to determine the am ...

  5. [DP]数位DP总结

     数位DP总结 By Wine93 2013.7 1.学习链接 [数位DP] Step by Step   http://blog.csdn.net/dslovemz/article/details/ ...

  6. 数位DP问题整理(一)

    第一题:Amount of degrees (ural 1057) 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1057 题意:[x,y ...

  7. 【学时总结】 ◆学时·IV◆ 数位DP

    [学时·IV] 数位DP ■基本策略■ 说白了就是超时和不超时的区别 :) 有一些特别的题与数位有关,但是用一般的枚举算法会超时.这时候就有人提出了--我们可以用动态规划!通过数字前一位和后一位之间的 ...

  8. 以前刷过的数位dp

    TOJ1688: Round Numbers Description The cows, as you know, have no fingers or thumbs and thus are una ...

  9. Ural1057. Amount of Degrees 题解 数位DP

    题目链接: (请自行百度进Ural然后查看题号为1057的那道题目囧~) 题目大意: Create a code to determine the amount of integers, lying ...

随机推荐

  1. Mysql表锁定解决

    #查看进程SELECT *FROM information_schema.processlistWHERE USER = 'root' AND state LIKE 'Waiting%';#杀掉进程K ...

  2. js点击更多显示更多内容效果

    我写了一个简单的分段显示插件,用法很简单:1,把你要分面显示的内容的容器元素增加一个class=showMoreNChildren,并增加一个自定义属性pagesize="8" 这 ...

  3. 考察printf函数返回值

    最近偶然间见了这样一道题:  #include<stdio.h> int main() { ; printf("%d\n",printf("%d", ...

  4. 2.java.lang.NullPointerException(空指针异常)

    调用了未经初始化的对象或者是不存在的对象 经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等.对数组操作中出现空指针, 即把数组的初始化和数组元素的初始化混淆起来 ...

  5. 基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构

    基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构 Neo4j 3.0.0 正式发布,这是 Neo4j 3.0 系列的第一个版本.此版本对内部架构进行了全新的设计;提供给开发者更强大的生 ...

  6. 继承ViewGroup研究(汇总) 一、二、三

    转载过来:为一.二.三版本. 仅供参考: 继承ViewGroup研究(1) --简介和一个小Demo 又翻开一个新篇章了,哈哈,上一回学习的是继承View,关于继承View个人感觉不是那么完美,做技术 ...

  7. jquery插件tab——小试牛刀

    <html> <head> <script type="text/javascript" src="http://ajax.googleap ...

  8. UVa 10330 - Power Transmission(最大流--拆点)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  9. Codechef Nuclear Reactors 题解

    There are K nuclear reactor chambers labelled from 0 to K-1. Particles are bombarded onto chamber 0. ...

  10. 关于SYN洪泛攻击简介

    在TCP三次握手中,server为了响应一个收到的SYN.分配并初始化连续变量和缓存.然后server发送一个SYNACK进行响应,并等待来自客户的ACK报文段. 假设某客户不发送ACK来完毕该三次握 ...