ural 1057(数位dp)
数位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)的更多相关文章
- URAL 1057 数位dp
题目传送门http://acm.timus.ru/problem.aspx?space=1&num=1057 最近在学习数位dp,具体姿势可以参照这篇论文:http://wenku.baidu ...
- [转]数位dp小记
转载自:http://blog.csdn.net/guognib/article/details/25472879 参考: http://www.cnblogs.com/jffifa/archive/ ...
- 数位DP 计划
通常的数位dp可以写成如下形式: [cpp] view plain copy int dfs(int i, int s, bool e) { if (i==-1) return s==target_s ...
- 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 ...
- [DP]数位DP总结
数位DP总结 By Wine93 2013.7 1.学习链接 [数位DP] Step by Step http://blog.csdn.net/dslovemz/article/details/ ...
- 数位DP问题整理(一)
第一题:Amount of degrees (ural 1057) 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1057 题意:[x,y ...
- 【学时总结】 ◆学时·IV◆ 数位DP
[学时·IV] 数位DP ■基本策略■ 说白了就是超时和不超时的区别 :) 有一些特别的题与数位有关,但是用一般的枚举算法会超时.这时候就有人提出了--我们可以用动态规划!通过数字前一位和后一位之间的 ...
- 以前刷过的数位dp
TOJ1688: Round Numbers Description The cows, as you know, have no fingers or thumbs and thus are una ...
- Ural1057. Amount of Degrees 题解 数位DP
题目链接: (请自行百度进Ural然后查看题号为1057的那道题目囧~) 题目大意: Create a code to determine the amount of integers, lying ...
随机推荐
- textarea 在浏览器中固定大小和禁止拖动
HTML 标签 textarea 在大部分浏览器中只要指定行(rows)和列(cols)属性,就可以规定 textarea 的尺寸,大小就不会改变,不过更好的办法是使用 CSS 的 height 和 ...
- requirejs + vue 项目搭建
以前都是支持 司徒正美 的,毕竟咱们也是跟着 司徒正美 一起走进了前端的世界.所以一般MVVM都是用avalon的,当然也是考虑到项目需要支持IE6,7,8的考虑.当然在用的时候也有一些小坑和bug, ...
- 数据库中字段类型对应C#中的数据类型
数据库中字段类型对应C#中的数据类型:数据库 C#程序 int int32 text string bigint int64 binary System.Byte[] bit Boolean char ...
- oracle导入导出exp,imp
exp dadifilm/oracle@dg file=/tmp/dadi.dmp full=y imp u_data/321@dg1 file=/dadi_desc.dmp Import: Rel ...
- display的table和cell外加table-layout:fixed等分布局,外加换行,word-wrap:break-word
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 一道java面试题-方法静态分派
一道面试题,以下程序的输出是? public class StaticDispatch { static abstract class Human{ } static class Man extend ...
- SMTP协议分析
SMTP协议分析 第1章. SMTP概述 1.1. SMTP在邮件通信中的位置 SMTP,即简单邮件传送协议,所相应RFC文档为RFC821.同http等多数应用层协议一样,它工作在C/S模 ...
- JavaScript之引用类型介绍
引用类型的值(对象)是应用类型的一个实例.在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,用于将数据和功能组织在一起.他们通常也被成为JavaScript中的类,但这种称 ...
- nodejs教程:安装express及配置app.js文件
express.js是nodejs的一个MVC开发框架,并且支持jade等多种模板.下面简单来说说express的安装和app.js文件的配置,然后在今后的教程中一步一步使用express.js搭建个 ...
- select实现选中跳转
select选择后直接跳转到其他网站的三种方式 第一种: ************************** <html> <head> <meta http- ...