zoukankan      html  css  js  c++  java
  • 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; 
    } 
    
  • 相关阅读:
    maven笔记
    enum笔记
    mysql笔记
    git笔记
    spark笔记
    使用GitHub进行团队合作
    深度学习网站
    顶级论文索引网站
    研究生-数学建模集
    算法练习网站
  • 原文地址:https://www.cnblogs.com/sssy/p/9637193.html
Copyright © 2011-2022 走看看