【数位DP】HDU 2089 不要62

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lvlinfeng970/article/details/80251998

先静一静想了改了好多次终于ac

这篇好好写一下。。。

参考http://www.cnblogs.com/wenruo/p/4725005.html


import java.io.PrintWriter;
import java.util.Scanner;

public class Main{
    static Scanner input = new Scanner(System.in);
    static PrintWriter out = new PrintWriter(System.out);
    static int[][] dp = new int[8][10];
    static void initial(){
        for(int i=0;i<=9;i++){
            if(i==4)continue;
            dp[1][i] = 1;
        }
        for(int i=2;i<=7;i++){
            for(int j=0;j<=9;j++){
                if(j==4)continue;
                for(int k=0;k<=9;k++){
                    if(j==6&&k==2)continue;
                    dp[i][j] += dp[i-1][k];
                }
            }
        }
    }
    static int getans(int x){
        int ans = 0;
        String str = Integer.toString(x);
        for(int i=1;i<=str.length();i++){
            for(int j=0;j<str.charAt(i-1)-'0';j++){
                if(i>1&&str.charAt(i-2)=='6'&&j==2)continue;
                ans += dp[str.length()+1-i][j];
            }
            if(i>1&&str.charAt(i-2)=='6'&&str.charAt(i-1)=='2')break;
            if(str.charAt(i-1)=='4')break;
        }
        return ans;
    }
    public static void main(String[] args){
        initial();
        while(input.hasNext()){
            int l = input.nextInt();
            int r = input.nextInt();
            if(l==0&&r==0)break;
            out.println(getans(r+1)-getans(l));
            out.flush();
        }
        
    }
}

猜你喜欢

转载自blog.csdn.net/lvlinfeng970/article/details/80251998
今日推荐