zoukankan      html  css  js  c++  java
  • 数位dp

    HDU2089,属于数位dp入门系列。

    多做做应该就会了。

     1 #include<iostream>
     2 #include<cstdio> 
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<cstring>
     7 #include<map>
     8 #include<set>
     9 #define f(i,a,b) for(int i=a;i<=b;i++)
    10 #define ll long long
    11 #define scan(i) scanf("%d",&i)
    12 #define scand(i) scanf("%lf",&i)
    13 #define scanl(i) scanf("%lld",&i)
    14 #define pii pair<int,int>
    15 #define pb push_back
    16 #define dbg(args...) cout<<#args<<" : "<<args<<endl; 
    17 #define pf printf
    18 //#define mp make_pair
    19 using namespace std;
    20 int n,m;
    21 int a[50];
    22 int dp[50][2];
    23 //dp[i][j]表示符合要求的,开头是i的数的个数
    24 int dfs(int pos,int pre,int sta,bool limit){
    25     //pos枚举哪一位,pre左边一位是什么,sta左边一位是不是6,limit到没到顶 
    26     if(pos==-1){
    27         return 1;
    28     }
    29     if(limit==false&&dp[pos][sta]!=-1){
    30         return dp[pos][sta];
    31     }
    32     int up;
    33     if(limit==true){
    34         up=a[pos];
    35     }
    36     else{
    37         up=9;
    38     }
    39     int tmp=0;
    40     f(i,0,up){
    41         if(pre==6&&i==2){
    42             continue; 
    43         }
    44         if(i==4) continue;
    45         if(limit==true&&i==a[pos]){
    46             tmp+=dfs(pos-1,i,i==6,true);
    47         }
    48         else tmp+=dfs(pos-1,i,i==6,false);    
    49     }
    50     if(limit==false) dp[pos][sta]=tmp;
    51     return tmp;    
    52 }
    53 int solve(int x){
    54     int pos=0;
    55     while(x){
    56         a[pos]=x%10;
    57 //        dbg(pos);
    58 //        dbg(a[pos]);
    59         pos++;
    60         x/=10;
    61     }
    62 //    dbg(pos);
    63     return dfs(pos-1,-1,0,true);
    64 }
    65 int main(){
    66     int l,r;
    67     memset(dp,-1,sizeof(dp));
    68     while(scanf("%d%d",&l,&r)!=EOF){
    69         if(l==0&&r==0) return 0;
    70         
    71 //        dbg(l);
    72 //        dbg(r);
    73 //        dbg(solve(l-1));
    74 //        dbg(solve(r)); 
    75         pf("%d
    ",solve(r)-solve(l-1));
    76     }
    77 } 
  • 相关阅读:
    C++ 三数之和
    C++ 保存读取二进制
    流媒体 Ubuntu部署srs、windows部署nginx
    sql函数(三)MERGE INTO函数
    sql函数(二)LISTAGG()函数(列转行函数)
    sql函数(一)ROW_NUMBER() OVER()--表内分组并排序
    java注释(类、构造函数、方法、代码块、单行、属性注释)
    springBoot注解整理
    @DateTimeFormat与@JsonFormat作用
    DataJPA简述与注解
  • 原文地址:https://www.cnblogs.com/St-Lovaer/p/14450095.html
Copyright © 2011-2022 走看看