[SCOI2009]windy数

原创 2018年04月16日 21:02:28

题目描述

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

分析

基础数位dp,难点在于如何处理前导零,因为本题要求没有前导零。
当上方所有位都为零时,当前位可以不受限制
状态为f[i][j],i为哪一位,j为上一位的值,因为上一位的值对当前位方案数有影响
具体参见代码

AC代码

#include<iostream>
#include<cstdio>
#include<cstring> 
using namespace std;
const int MAXN=55;
int f[MAXN][MAXN],a[MAXN];
int abs(int x){return x<0?-x:x;} 
int dfs(int pos,int pre,bool limit,bool ling){
    if(pos==-1) return 1;
    if(!limit&&!ling&&f[pos][pre]!=-1) return f[pos][pre];
    int up=limit?a[pos]:9;
    int sum=0,p;
    for(int i=0;i<=up;i++){
        p=i;
        if(ling&&!i) p=-100;
        if(abs(i-pre)<2) continue;
        sum+=dfs(pos-1,p,limit&&i==a[pos],p==-100);
    } 
    if(!limit&&!ling) f[pos][pre]=sum;
    return sum; 
} 
int solve(int x){
    int pos=0;
    memset(f,-1,sizeof(f));
    while(x){
        a[pos++]=x%10;
        x/=10;
    }
    return dfs(pos-1,-100,true,true);
}
int main(){
    int l,r; scanf("%d%d",&l,&r);
    printf("%d\n",solve(r)-solve(l-1));
    return 0;
}

基于阿里云数加平台的Serverless实践

Serverless是当今架构领域最火的话题之一,因为它又一次大幅提升了用户的资源效用效率,降低了管理成本,让devOps成为真正的事实。Serverless可以让开发者更加关注代码层面的内容,节省开发时间,提升开发效率,有可能成为下一个技术引爆点!
  • 2016年12月01日 14:21

[BZOJ]1026: [SCOI2009]windy数

Description   windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道, 在A和B之间,包括A和B,总共有多少个win...
  • baidu_36797646
  • baidu_36797646
  • 2016-11-28 13:55:20
  • 535

bzoj1026: [SCOI2009]windy数-数位DP

问题描述 windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 数位DP 分成两步...
  • zz_ylolita
  • zz_ylolita
  • 2016-02-27 21:49:38
  • 1939

bzoj1026: [SCOI2009]windy数 数位dp

第一次接触数位系统,感觉还是很神奇的。 f[I][J]代表一个i位数顶位为j的windy数有多少个。 我们可以用work(n)来计算n以内所有windy数的个数。 那么答案就是work(b)-work...
  • IED98
  • IED98
  • 2014-12-30 20:17:32
  • 672

【bzoj】1026: [SCOI2009]windy数

【bzoj】1026: [SCOI2009]windy数Descriptionwindy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A...
  • with_passion
  • with_passion
  • 2016-01-29 10:31:31
  • 399

BZOJ1026_windy数

链接:BZOJ1026 题意:【A,B】区间内,有多少个所有相邻数位数值之差不小于2的数 还是来想记忆化的数位DP 首先len肯定是一维变量,flag是一维,既然相邻数位数值有关系,...
  • kevin66654
  • kevin66654
  • 2016-05-13 20:26:43
  • 540

[BZOJ1026][SCOI2009]windy数

数位DP经典题..最后写完挺短,然而为什么感觉这么难写…再次证明了本蒟蒻是有多么若…...
  • Zvezda_
  • Zvezda_
  • 2015-08-07 01:07:54
  • 225

bzoj 1026 [SCOI2009]windy数 题解

1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 1875  Solved: 810 [Submit]...
  • u013724185
  • u013724185
  • 2014-03-10 13:52:55
  • 954

1026: [SCOI2009]windy数

数位dp,dp[i][j]中i,j分别表示位数和最高位数字#include #include #include #include #include #include #include #include...
  • acm_fighting
  • acm_fighting
  • 2015-07-17 09:56:02
  • 542

[BZOJ1026][SCOI2009]windy数(数位dp)

没有什么永远。这个道理其实大家都懂,所以才会祈求永远。
  • Clove_unique
  • Clove_unique
  • 2016-04-24 16:54:38
  • 387
收藏助手
不良信息举报
您举报文章:[SCOI2009]windy数
举报原因:
原因补充:

(最多只允许输入30个字)