显然这题可以用动态规划求解,而且发现只与上一个状态有关,所以可以滚动,详情看代码

	int n, k;
    rd(n, k);
    vector<int> a(n + 1);
    for (int i = 1; i <= n; i++) rd(a[i]);
    ll cdp1 = 0, cdp0 = 0, ldp1 = 0, ldp0 = 0;
    for (int i = 1; i <= n; i++) {
        int bi; rd(bi);
        if (ldp1) cdp1 = ldp1 + bi;
        if (ldp0 >= k) cdp1 = max(cdp1, ldp0 + bi - k);
        cdp0 = ldp0 + a[i];
        if (ldp1 >= k) cdp0 = max(cdp0, ldp1 + a[i] - k);
        ldp1 = cdp1;
        ldp0 = cdp0;
    }
    println(max(cdp1, cdp0));