USETC 250 windy数 数位DP

注意处理数字只有一位的情况(其实不用怎么处理)= =

简单数位DP

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <climits>
#include <string>
#include <iostream>
#include <map>
#include <cstdlib>
#include <list>
#include <set>
#include <queue>
#include <stack>

using namespace std;

typedef long long LL;
const int maxn = 20;
int lim[maxn],len;
int num[maxn];
int f[15][15][15][2];

void getlim(int num) {
    memset(lim,0,sizeof(lim));
    len = 0;
    while(num) {
        lim[len++] = num % 10;
        num /= 10;
    }
}

int myabs(int x) {
    return x < 0 ? -x : x;
}

int dfs(int now,int prev,int maxd,int first,int bound) {
    int &note = f[now][prev][maxd][first];
    if(now == 0) {
        if(first && maxd >= 2) {
            return 1;
        }
        return 0;
    }
    if(!bound && note != -1) return note;
    int m = bound ? lim[now - 1] : 9,ret = 0;
    for(int i = 0;i <= m;i++) {
        num[now - 1] = i;
        if(first) {
            int nmaxd = min(maxd,myabs(i - prev));
            ret += dfs(now - 1,i,nmaxd,1,bound && i == m);
        }
        else {
            ret += dfs(now - 1,i,maxd,i || first,bound && i == m);
        }
    }
    if(!bound) note = ret;
    return ret;
}

int work(int num) {
    memset(f,-1,sizeof(f));
    if(num < 10) return num;
    getlim(num);
    return dfs(len,0,11,0,1);
}

int main() {
    int n,m;
    while(scanf("%d%d",&n,&m) == 2) {
        printf("%d\n",work(m) - work(n - 1));
    }
    return 0;
}

  

USETC 250 windy数 数位DP

时间: 2024-10-22 17:56:39

USETC 250 windy数 数位DP的相关文章

UESTC 250 windy数 数位dp

题目链接 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define mem1(a) memset(a, -1, sizeof(a)) 4 #define ll long long 5 int dp[20][20], digit[20], len; 6 ll dfs(int len, int pre, bool fp, bool first) { //first表示前面的数是否全部为0, pre是前一个数 7 if(!len) 8 re

bzoj 1026 windy数(数位DP)

1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 2615  Solved: 1155 [Submit][Status] Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? Input 包含两个整数,A B. Output 一个整数. Sample Input [

bzoj1026: [SCOI2009]windy数 数位dp

题目: http://www.lydsy.com/JudgeOnline/problem.php?id=1026 题意: Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B,总共有多少个windy数? Input 包含两个整数,A B. Output 一个整数 思路: 数位dp,记忆化搜索. 1 #include <bits/stdc++.h> 2 3 using namesp

【BZOJ-1026】windy数 数位DP

1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5230  Solved: 2353[Submit][Status][Discuss] Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? Input 包含两个整数,A B. Output 一个整数 Sample I

[BZOJ 1026][SCOI 2009]windy数(数位DP)

题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1026 很基础的数位DP题,很早之前我就尝试做这题,不过当时我被这题吓死了,现在回过头做这题,感觉简单多了. 做这个题时我想到了POJ一道类似的组合数学的题,同样是按数位统计,有异曲同工之妙. 题目要求[a,b]区间上的windy数个数,我们可以转化成求[1,a]上的windy数个数-[1,b-1]上的windy数个数.题目转化成了求[1,x]上的windy数个数,我们就写个函数c

bzoj 1026 [SCOI2009]windy数 数位dp

1026: [SCOI2009]windy数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=1026 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? Input 包含两个整数,A B. Output 一个整数.

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

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 <= 2

【bzoj1026】[SCOI2009]windy数 数位dp

题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 输入 包含两个整数,A B. 输出 一个整数,表示答案 样例输入 [输入样例一] 1 10 [输入样例二] 25 50 样例输出 [输出样例一] 9 [输出样例二] 20 题解 数位dp 快联赛了重写了一下,发现以前写的太傻逼了= = 由于加一个数位的贡献只与最高位有关,因此设 $f[i][j]$ 表示 $i$ 位数

bzoj 1026 [ SCOI2009 ] windy数 —— 数位DP

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1026 蛮简单的数位DP,预处理 f[i][j] 表示 i 位数,以 j 开头的 windy 数个数: 但不明白为什么最后一位拿出来特判 ret++  不对,而写在循环里,特判 i==1 就对了... 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm&g