zoukankan      html  css  js  c++  java
  • hdu2089不要62(数位dp)

    题目大意就是数字中不能出现 62 和4

    代码:

    /*************************************************************************
        > File Name: 2089.cpp
        > Author: minshik
        > Created Time: 2014年05月22日 星期四 00时52分49秒
     ************************************************************************/
    //数位dp 
    //
    #include <string>
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <vector> 
    #include <list> 
    #include <map> 
    #include <queue> 
    #include <cmath> 
    using namespace std;
    
    int dp[10][3]; //i,j 表示i位 0:没有,1:最后一个是6,2:已经有不符和了
    
    
    int DP(int n)
    {
        bool flag = false;
        int s[15];
        int idx = 0;
        int x = n;
        while(x)
        {
           s[++idx] = x%10;
           x/=10;
        }
        s[idx+1] =0;
        int ans = 0;
        for(int i=idx;i>0;i--)
        {
            ans += (dp[i-1][2]*s[i]);    //之前已经有不符和
            if( flag  )ans+=(dp[i-1][0]*s[i]);
            else
            {
                if( s[i] >4 ) ans+= dp[i-1][0];
                if( s[i] > 6 ) ans+=dp[i-1][1];
                if( s[i+1]==6 && s[i]>2 ) ans+=dp[i][1];
            }
            if( s[i]==4 || s[i+1]==6&&s[i]==2 )
            {
                flag = true;
            }
        }
        return n-ans;
    }
    
    int main()
    {
        dp[0][0] = 1;
        for(int i=1;i<=8;i++)
        {
            dp[i][0] = dp[i-1][0]*9-dp[i-1][1];
            dp[i][1] = dp[i-1][0];
            dp[i][2] = dp[i-1][0]+dp[i-1][1]+dp[i-1][2]*10;
        }
        int n,m;
        while(scanf("%d %d",&n,&m)!=EOF)
        {
            if( n==0 && m ==0 )break;
    
            printf("%d
    ",DP(m+1)-DP(n));
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Android OpenGL(2)
    Bootloader:BareBox
    Android OpenGL(1)
    Android脚本环境
    Android用户界面开发:事件处理
    S5PV210按键控制LED
    S5PV210控制蜂鸣器
    Windows Vista/Windows 7上安装wince5.0/6.0及SDK模拟器
    Makefile
    每日英语:Apps Reorder the Job Landscape
  • 原文地址:https://www.cnblogs.com/doubleshik/p/3744841.html
Copyright © 2011-2022 走看看