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 。

bzoj千题计划117:bzoj1026: [SCOI2009]windy数的更多相关文章

  1. BZOJ1026 SCOI2009 windy数 【数位DP】

    BZOJ1026 SCOI2009 windy数 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B ...

  2. bzoj1026: [SCOI2009]windy数(数位dp)

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 8203  Solved: 3687[Submit][Sta ...

  3. 2018.06.30 BZOJ1026: [SCOI2009]windy数(数位dp)

    1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Description windy定义了一种windy数.不含前导零且相邻两 ...

  4. bzoj1026: [SCOI2009]windy数(传说你是数位DP)

    1026: [SCOI2009]windy数 题目:传送门 题解: 其实之前年少无知的时候好像A过...表示当时并不知道什么数位DP 今天回来深造一发... 其实如果对这个算法稍有了解...看到这题的 ...

  5. BZOJ1026: [SCOI2009]windy数[数位DP]

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 6346  Solved: 2831[Submit][Sta ...

  6. 【数位DP】bzoj1026: [SCOI2009]windy数

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4163  Solved: 1864[Submit][Sta ...

  7. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  8. BZOJ1026: [SCOI2009]windy数

    传送门 md直接wa了78次,身败名裂 没学过数位DP硬搞了一道数位DP的模板题,感觉非常的愉(sha)悦(cha). 二分转化枚举思想.首先DP预处理出来$f[i][j]$表示有$i$位且第$i$位 ...

  9. [bzoj1026][SCOI2009]windy数_数位dp

    windy数 bzoj-1026 题目大意:求一段区间中的windy数个数. 注释:如果一个数任意相邻两位的差的绝对值都不小于2,这个数就是windy数,没有前导0.$区间边界<=2\cdot ...

随机推荐

  1. ubuntu安装php-curl拓展

    首先输入apt-cache search curl | grep php查询curl的php支持名字可能会返回如下内容:php5-curl - CURL module for php5安装:sudo ...

  2. jsp与Ajax技术

    Ajax 是Asynchronous Javascript and XML的缩写,异步的JavaScript和xml.Ajax是由JavaScript.XML.CSS.DOM等多种已有技术的结合,它可 ...

  3. vue 笔记1

    created 钩子可以用来在一个实例被创建之后执行代码: new Vue({ data: { a: 1 }, created: function () { // `this` 指向 vm 实例 co ...

  4. SpannableString的基本用法

    原文地址:http://www.cnblogs.com/kross/p/3645594.html 以前一直好奇QQ的输入框里面是如何出现表情的,今天看了下这个,心中发出“原来是这样啊”的感叹. 通常情 ...

  5. 反爬虫之JS反编译:PyExecJS

    PyExecJS是python运行JavaScript代码的包 安装: pip install  PyExecJS (或者easy_install PyExecJS) 依赖:  需要有执行JS的程序, ...

  6. DataTable学习笔记 - 01

    DataTable 是 jQuery 的一个插件. 代码上来吧, <!DOCTYPE html> <html> <head> <meta charset=&q ...

  7. 动态生成lookup字段

    var  i: Integer;begin  //ADOQuery已打开   //在数据集打开的情况下新增加一个字段  with Self.ADOQuery1 do  begin    TDataSe ...

  8. js时间戳转换日期格式和日期计算

    一.时间戳转换日期 function formatDate(datetime) { // 获取年月日时分秒值 slice(-2)过滤掉大于10日期前面的0 var year = datetime.ge ...

  9. 自定义smokeping告警(邮件+短信)

    前段时间接到公司IT同事需求,帮助其配置smokeping的告警功能,之前配置的姿势有些问题,告警有些问题,现在调试OK,在此将关键配置点简单记录下. 关键的配置项主要有: 定义告警规则并配置将告警信 ...

  10. BZOJ5118 Fib数列2(矩阵快速幂)

    特殊矩阵的幂同样满足费马小定理. #include<iostream> #include<cstdio> #include<cmath> #include<c ...