import java.util.Scanner;

public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int T = scanner.nextInt(); int m1 = scanner.nextInt(); int m2 = scanner.nextInt(); int[] a = new int[1005]; boolean[][] r = new boolean[10005][1005]; boolean[][] l = new boolean[10005][1005]; int[][] dp = new int[10005][1005];

    for (int i = 1; i < n; i++) {
        a[i] = scanner.nextInt();
    }
    
    for (int i = 1; i <= m1; i++) {
        int x = scanner.nextInt();
        for (int j = 1; j < n; j++) {
            if (x <= T) {
                r[x][j] = true;
            }
            x += a[j];
        }
    }
    
    for (int i = 1; i <= m2; i++) {
        int x = scanner.nextInt();
        for (int j = n; j >= 2; j--) {
            if (x <= T) {
                l[x][j] = true;
            }
            x += a[j-1];
        }
    }
    
    for (int i = 0; i < dp.length; i++) {
        for (int j = 0; j < dp[0].length; j++) {
            dp[i][j] = INF;
        }
    }
    
    dp[0][1] = 0;
    for (int i = 0; i <= T; i++) {
        for (int j = 1; j <= n; j++) {
            if (i + 1 <= T) {
                dp[i+1][j] = Math.min(dp[i+1][j], dp[i][j] + 1);
            }
            if (i + a[j-1] <= T && l[i][j]) {
                dp[i+a[j-1]][j-1] = Math.min(dp[i+a[j-1]][j-1], dp[i][j]);
            }
            if (i + a[j] <= T && r[i][j]) {
                dp[i+a[j]][j+1] = Math.min(dp[i+a[j]][j+1], dp[i][j]);
            }
        }
    }
    
    if (dp[T][n] == INF) {
        System.out.println("-1");
    } else {
        System.out.println(dp[T][n]);
    }
}
请用java语言转换下面的c++代码:#includebitsstdc++husing namespace std;const int INF=0x3f3f3f3f;int nTm1m2;int a1005;bool r100051005;bool l100051005;int dp100051005;int main	scanfdddd&n&T&m1&m2;	forint i=1;in;i++

原文地址: https://www.cveoy.top/t/topic/iF0L 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录