#include<stdio.h>
#include<string.h>
#define N 20
#define ll __int64
ll dp[N][N];//最多记忆400种情况
ll digit[N];
ll dfs(ll len,ll cnt,ll ok) {
if(!len) return cnt;
if(!ok&&dp[len][cnt]!=-1)
return dp[len][cnt];
ll i,ans=0,maxx=ok?digit[len]:9;
for(i=0;i<=maxx;i++) {
if(i==1)ans+=dfs(len-1,cnt+1,ok&&i==maxx);
else
ans+=dfs(len-1,cnt,ok&&i==maxx);
}
if(!ok)
dp[len][cnt]=ans;
return ans;
}
ll f(ll n) {
ll len=0;
while(n) {
digit[++len]=n%10;
n/=10;
}
return dfs(len,0,1);
}
int main() {
ll n,m,k;
memset(dp,-1,sizeof(dp));
while(scanf("%I64d%I64d",&n,&m)!=EOF) {
if(n>m) {
k=n;
n=m;
m=k;
}
printf("%I64d\n",f(m)-f(n-1));
}
return 0;}
<pre name="code" class="cpp">/*
数位dp
直接相加更快
另一种思路
*/
#include<stdio.h>
#include<string.h>
#define N 20
#define ll __int64
ll lower[N];//储存十的倍数。
ll dp[N][10];
ll digit[N];
ll rest[N];//用来储存有多少数
ll dfs(ll len,ll cnt,ll ok) {
if(!len) return cnt==1?1:0;
if(!ok&&dp[len][cnt]!=-1)
return dp[len][cnt];
ll i,ans=0,maxx=ok?digit[len]:9;
for(i=0;i<=maxx;i++)
ans+=dfs(len-1,i,ok&&i==maxx);
if(cnt==1) {
if(!ok)
ans+=lower[len];
else
ans+=rest[len];//
}
if(!ok)
dp[len][cnt]=ans;
return ans;
}
ll f(ll n) {
ll len=0;
ll z=n;
while(n) {
digit[++len]=n%10;
rest[len]=z%lower[len]+1;//比如是163的话,因为从100-163所以取余后要加一
n/=10;
}
return dfs(len,0,1);
}
int main() {
ll i,n,m;
lower[0]=1;
memset(dp,-1,sizeof(dp));
for(i=1;i<=19;i++)
lower[i]=lower[i-1]*10;
while(scanf("%I64d%I64d",&n,&m)!=EOF) {
printf("%I64d\n",f(m)-f(n-1));
}
return 0;}
												

fzu 2113 数位dp的更多相关文章

  1. fzoj 2113数位dp

    参考http://blog.csdn.net/xingyeyongheng/article/details/8785785 #include<stdio.h> #define ll lon ...

  2. FZU 2113(数位dp)

    题目连接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=38054 题意:求区间[a,b]中包含'1'的个数. 分析:数位dp ...

  3. FZU 2113 BCD Code 数位dp

    数位dp,但是很奇怪的是我在虚拟oj上用GUC C++提交会wa,用Visual c++提交正确,但是加上注释后提交又莫名CE--好任性啊 0 ,0 题目思路:看代码吧 注释很详细 #include& ...

  4. FZU - 2109 Mountain Number 数位dp

    Mountain Number One integer number x is called "Mountain Number" if: (1) x>0 and x is a ...

  5. 数位DP之小小结

    资料链接:http://wenku.baidu.com/view/9de41d51168884868662d623.html http://wenku.baidu.com/view/d2414ffe0 ...

  6. 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP

    [BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...

  7. bzoj1026数位dp

    基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...

  8. uva12063数位dp

    辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...

  9. HDU2089 不要62[数位DP]

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

随机推荐

  1. Oracle事务控制语言

    事务控制语言在各大数据库中都差不多,本文讲讲Oracle和别的数据库不一样的地方 Oracle每条sql语句都是一个事务,像insert.update.delete之类的,每次执行过都要commit提 ...

  2. [BZOJ1088][SCOI2005]扫雷Mine DP

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1088 记录下每一个格子对应左边格子放的雷的情况,然后dp转移就好了. #include&l ...

  3. vue cli 3 打包过大问题

    vue cli 3 打包命令 npm run build,这种情况下的打包可以通过设置 vue.config.js里面的 productionSourceMap: false. 如果是自己设置的打包环 ...

  4. H.264学习笔记2——帧内预测

    帧内预测:根据经过反量化和反变换(没有进行去块效应)之后的同一条带内的块进行预测. A.4x4亮度块预测: 用到的像素和预测方向如图: a~f是4x4块中要预测的像素值,A~Q是临块中解码后的参考值. ...

  5. leetcode_Counting Bits_dp

    给定num,用O(num)的时间复杂度计算0--num中所有数的二进制表示中1的个数. vector<int> countBits(int num) { vector<,); ;i& ...

  6. jquery中ajax使用error调试错误

    error:function (XMLHttpRequest, textStatus, errorThrown) { } XMLHttpRequest.readyState状态码  0:未初始化还没有 ...

  7. java_线程优先级

    线程优先级分为三个等级: MAX_PIORITY:10  优先 MIN_PRIORITY:1 NORM_PRIORITY:5  默认 getPriority:获取优先级 setPriority:设置优 ...

  8. 在 XML 中有 5 个预定义的实体引用

  9. 16.04 下 ufw 防火墙的的开启、禁用、开放端口、关闭端口

    16.04 下的 ufw 防火墙相关操作使用ufw命令.通过ufw --help可以查看所有相关命令. 打开防火墙 sudo ufw enable 重启防火墙 sudo ufw reload 打开指定 ...

  10. [驱动] 一个简单内核驱动,通过qemu调试(1)

    模块 通过在HOST上修改linux kernel源代码,重新编译一个vmlinux,然后,通过qemu根据这个bzImage 启动一个vm,进行调试 #cat drivers/char/test.c ...