8662 234的和
⭐️难度:中等
🌟考点:模拟、二维前缀和
📖
📚
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;public class Main {static int[] a = new int[15];static long[][] dp = new long[15][100];public static void main(String[] args) {Scanner sc = new Scanner(System.in);int l = sc.nextInt();int r = sc.nextInt();for(long x[] : dp){Arrays.fill(x,-1);}System.out.println(f(r) - f(l - 1));}static long f(int x){int cnt = 0;while(x != 0){a[++cnt] = x % 10;x /= 10;}return dfs(true,cnt,0);}static long dfs(boolean lim,int pos,int sum){if(pos == 0) return sum;if(dp[pos][sum] != -1 && !lim) return dp[pos][sum]; // !limint up = lim ? a[pos] : 9;long res = 0;for(int i = 0;i <= up;i++){if(i == 2 || i == 3 || i == 4){res = res + dfs(lim && i == up,pos - 1,sum + i); // lim && i == up}else{res = res + dfs(lim && i == up,pos - 1,sum); // lim && i == up}}if(!lim) dp[pos][sum] = res;return res;}
}
🍎笔记