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


    嗯比前面两道都简单...其实这是我第一道写的数位dp...非常基础了...

    依然是码代码....
    我的代码...怎么这么丑呢....
     1 #include<cmath>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<queue>
     7 using namespace std;
     8 long long a,b;
     9 int shu[20]={};
    10 int f[20][20]={};
    11 int abv(int x){
    12     if(x>0){
    13         return x;
    14     }
    15     return -x;
    16 }
    17 int dfs(int k,int num,bool shang){
    18     if(k<=0){
    19         return 1;
    20     }
    21     if((!shang)&&num>=0&&f[k][num]!=-1){
    22         return f[k][num];
    23     }
    24     int ans=0,p,maxn=shang?shu[k]:9;
    25     for(int i=0;i<=maxn;i++){
    26         if(abv(i-num)<2){
    27             continue;
    28         }
    29         p=i;
    30         if(i==0&&num==-5){
    31             p=num;
    32         }
    33         ans+=dfs(k-1,p,shang&&i==maxn);
    34     }
    35     if(!shang){
    36         f[k][num]=ans;
    37     }
    38     return ans;
    39 }
    40 int solve(long long x){
    41     memset(shu,0,sizeof(shu));
    42     int k=0;
    43     while(x){
    44         shu[++k]=x%10;
    45         x/=10;
    46     }
    47     return dfs(k,-5,1);
    48 }
    49 int main(){
    50     scanf("%lld%lld",&a,&b);
    51     memset(f,-1,sizeof(f));
    52     printf("%d
    ",solve(b)-solve(a-1));
    53     return 0;
    54 }
    View Code
  • 相关阅读:
    元素居中浏览器的多种方法集锦
    javascript深入理解js闭包
    闭包
    碎片
    define
    define定义方法
    创建数据库sql语句
    java十进制转换成二进制数
    java解析JSON数据
    java实现最通俗易懂的01背包问题
  • 原文地址:https://www.cnblogs.com/137shoebills/p/7783876.html
Copyright © 2020-2023  润新知