http://www.lydsy.com/JudgeOnline/problem.php?id=1026

数位DP

如果前一位填的是0,

0是前导0,下一位可以随便填

0不是前导0,下一位不能填1

为避免这种情况

枚举位数,强制不出现前导0

#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; int dp[][]; int a[]; int LEN; int dfs(int dep,int num,bool lim)
{
if(!lim && dp[dep][num]!=-) return dp[dep][num];
if(!dep) return ;
int up= lim ? a[dep] : ,tmp=;
for(int i=;i<=up;++i)
{
if(dep==LEN && !i) continue;
if(abs(i-num)<) continue;
tmp+=dfs(dep-,i,lim && i==up);
}
if(!lim) dp[dep][num]=tmp;
return tmp;
} int solve(int n)
{
if(!n) return ;
int len=;
while(n)
{
a[++len]=n%;
n/=;
}
int sum=;
for(int i=;i<len;++i)
{
LEN=i;
sum+=dfs(i,,);
}
LEN=len;
sum+=dfs(len,,);
return sum;
} int main()
{
int a,b;
scanf("%d%d",&a,&b);
memset(dp,-,sizeof(dp));
printf("%d\n",solve(b)-solve(a-));
}

或者是记录有无前导零这个状态

#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; int dp[][][]; int a[]; int LEN; int dfs(int dep,int num,bool lim,bool zero)
{
if(!lim && dp[dep][num][zero]!=-) return dp[dep][num][zero];
if(!dep) return !zero;
int up= lim ? a[dep] : ,tmp=;
for(int i=;i<=up;++i)
{
if(abs(i-num)< && !zero) continue;
tmp+=dfs(dep-,i,lim && i==up,zero && !i);
}
if(!lim) dp[dep][num][zero]=tmp;
return tmp;
} int solve(int n)
{
if(!n) return ;
int len=;
while(n)
{
a[++len]=n%;
n/=;
}
return dfs(len,,,);
} int main()
{
int a,b;
scanf("%d%d",&a,&b);
memset(dp,-,sizeof(dp));
printf("%d\n",solve(b)-solve(a-));
}

1026: [SCOI2009]windy数

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 8771  Solved: 3959
[Submit][Status][Discuss]

Description

  windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,
在A和B之间,包括A和B,总共有多少个windy数?

Input

  包含两个整数,A B。

Output

  一个整数

Sample Input

【输入样例一】
1 10
【输入样例二】
25 50

Sample Output

【输出样例一】
9
【输出样例二】
20

HINT

【数据规模和约定】

100%的数据,满足 1 <= A <= B <= 2000000000 。

最新文章

  1. Linux系统修改PATH环境变量方法
  2. js定时器的使用(实例讲解)
  3. 【c++】必须在类初始化列表中初始化的几种情况
  4. Tesseract-OCR引擎 入门
  5. freebsd 禁用root登录ssh并给普通用户登录权限
  6. eclipse有生成不带参数的构造方法的快捷键吗
  7. 混合拉普拉斯分布(LMM)推导及实现
  8. Centos7部署Zabbix
  9. 关于HTTP中GET与POST的区别
  10. jvm详情——6、堆大小设置简单说明
  11. FreeBSD常用操作
  12. Ubuntu Server 18.04 网络设置不生效的解决
  13. [转载]js正则表达式/replace替换变量方法
  14. iPhone 上你可能还不知道的小技巧
  15. (转)Spring &amp; SpringMVC学习
  16. iOS 给UIView添加xib
  17. Idea安装Python插件并配置Python SDK
  18. caffe 配置文件详解
  19. 剑指Offer——二叉搜索树的第k个结点
  20. MapReduce学习笔记

热门文章

  1. 项目Beta冲刺(团队)第七天
  2. 项目冲刺Beta第二篇博客
  3. Windows Apache(ApacheHaus)安装配置教程
  4. javascript数据基本定义以及对象{}和数组[]的含义和使用
  5. angularJS1笔记-(1)-多控制器
  6. Spring 计划 7.0
  7. canvas制作原生的百分比圆形比例等
  8. office2013 激活方法
  9. ClientDataSet字段不能进行编辑时的解决方法
  10. Nginx在Linux上的安装和配置