luogu P2657 [SCOI2009]windy数 数位dp 记忆化搜索

Posted sssy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P2657 [SCOI2009]windy数 数位dp 记忆化搜索相关的知识,希望对你有一定的参考价值。

题目链接

luogu P2657 [SCOI2009]windy数

题解

我有了一种所有数位dp都能用记忆话搜索水的错觉

代码

#include<cstdio> 
#include<algorithm> 
inline int read() { 
    int x = 0,f = 1; 
    char c = getchar(); 
    while(c < '0' || c > '9') c = getchar(); 
    while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar(); 
    return x * f ;
} 
int a,b; 
int f[100][100];
int num[100];  
int tot; 
int dfs(int n,int lim,int pre)  { 
    if(n == 0) return 1; 
    if(!lim && f[n][pre]) return f[n][pre]; 
    int sum = 0; 
    for(int i = 0;i <= (lim ? num[n] : 9);++ i)  {
        if(i == 0 && pre == -1) sum += dfs(n - 1,lim && i == num[n],-1); 
        else if(abs(pre - i) >= 2) sum += dfs(n - 1,lim && i == num[n],i);  
    } 
    if(!lim) f[n][pre] = sum ; 
    return sum; 
} 
int solve(int x) { 
    int tot = 0; 
    while(x) num[++ tot] = x % 10,x /= 10; 
    return dfs(tot,1,-1); 
} 
int main() { 
    a = read(),b = read(); 
    printf("%d
", solve(b) - solve(a - 1)); 
    return 0; 
} 

以上是关于luogu P2657 [SCOI2009]windy数 数位dp 记忆化搜索的主要内容,如果未能解决你的问题,请参考以下文章

luogu P2657 [SCOI2009]windy数 数位dp入门题

P2657 [SCOI2009]windy数

P2657 [SCOI2009]windy数

luogu2657bzoj1026 [SCOI2009]windy数 [动态规划 数位dp]

P2657 [SCOI2009] windy 数

P2657 [SCOI2009]windy数