zoukankan      html  css  js  c++  java
  • HDU 2089 dfs

    数位DP 

    dfs写法  时间 9^9  也不会超时

    感觉数据水了 

    #include <iostream>
    #include<string.h>
    #include<stdio.h>
    using namespace std ;
    
    int dig[10],f[10][2];
    int calc(int n)
    {
       int cnt=0;
       while(n)
       {
           cnt++;
           n/=10;
       }
       return cnt;
    }
    int dfs(int i,int s,int e)  //e为0  那么可以随便填 e为1  前面一位为6
    {
        if(i==0)
            return 1;
        if(!e&&f[i][s]!=-1) //可以随便填 数据也有 
            return f[i][s];
        int ans=0;
        int u=e?dig[i]:9;  //1的话不能随便填
        for(int j=0;j<=u;j++)
        {
            if(j==4||(s&&j==2))
                continue;
            ans+=dfs(i-1,j==6,e&&j==u);
        }
        return  e?ans:f[i][s]=ans;//记忆化一下
    }
    void cald(int n,int len)
    {
        for(int i=1;i<=len;i++)
        {
              dig[i]=n%10;
              n=n/10;
        }
    }
    int solve(int n)
    {
        int len=calc(n);
        cald(n,len);
        int ans=dfs(len,0,1);
        return ans;
    }
    int main()
    {
        int n,m ;
        memset(f,-1,sizeof(f)) ;
        while(~scanf("%d%d",&n,&m))
        {
            if(n==0 && m==0)
                break ;
            printf("%d
    ",solve(m)-solve(n-1)) ;//用[0,m]-[0,n)即可得到区间[n,m]
        }
        return 0 ;
    }
  • 相关阅读:
    团队冲刺--第二阶段(七)
    对搜狗输入法的评价
    团队冲刺--第二阶段(六)
    课堂练习-找水王
    基础
    基础
    基础
    基础
    基础
    基础
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/6476576.html
Copyright © 2011-2022 走看看