Submission #1142606

#TimeUsernameProblemLanguageResultExecution timeMemory
1142606nuutsnoyntonCollecting Stamps 3 (JOI20_ho_t3)C++20
100 / 100
1506 ms128828 KiB
#include<bits/stdc++.h>

using namespace std;
using ll = long long;
ll a[202], b[202], cost_baruun[202], cost_zuun[202];
ll baruun[202][202][202], ans, zuun[202][202][202], N;
int main() {
	ll n, m, r, x, y, i, lenght, cnt1, s, lef, rig, cnt, j, t;
	N = n;
	cin >> n >> m;
	
	a[0] = 0;
	for (i = 1; i <= n; i ++) cin >> a[i];
	for (i = 1; i < n + 1; i ++) {
		b[n + 1 - i] =m- a[i];
	}
	b[0]= 0;
	for (i = 1; i <= n; i ++) cin >> cost_baruun[i];
	for (i = 1; i <= n; i ++) cost_zuun[i] = cost_baruun[n  + 1 - i];
	ans = 0;
	for (i = 0; i <= 200; i ++) for (j = 0; j <= 200; j++) for ( r = 0; r <= 200; r ++) baruun[i][j][r] = zuun[i][j][r] =1e18; 
	baruun[0][0][0] = zuun[0][0][0] = 0;
	for ( lenght = 1; lenght <= n; lenght ++){
		for ( lef = 0; lef <= n; lef ++) {
			for ( rig = 0; lef + rig <= lenght; rig ++) {
				for ( cnt = 0; cnt <= n; cnt ++) {
					// baruun
					if ( baruun[lef][rig][cnt] != 1e18) ans = max(ans, cnt);
					if ( zuun[lef][rig][cnt] != 1e18) ans = max(ans, cnt);
					if ( rig < n) {
						s = baruun[lef][rig][cnt] + (a[rig + 1] - a[rig]);
						cnt1 = cnt;
						if ( s <= cost_baruun[rig + 1]) cnt1 ++;
						baruun[lef][rig + 1][cnt1] = min(baruun[lef][rig + 1][cnt1], s);
						s = zuun[lef][rig][cnt] + (b[lef] + a[rig + 1]);
						cnt1 = cnt;
						if ( s <= cost_baruun[rig + 1]) cnt1 ++;
						baruun[lef][rig + 1][cnt1] = min(baruun[lef][rig + 1][cnt1], s);
					}
					if ( lef < n) {
						s = baruun[lef][rig][cnt] + (a[rig] + b[lef + 1]);
						cnt1 = cnt;
						if ( s <= cost_zuun[lef + 1]) cnt1 ++;
						zuun[lef + 1][rig][cnt1] = min(zuun[lef + 1][rig][cnt1], s);
						s = zuun[lef][rig][cnt] + (b[lef + 1] - b[lef]);
						cnt1 = cnt;
						if ( s <= cost_zuun[lef + 1]) cnt1 ++;
						zuun[lef + 1][rig][cnt1] = min(zuun[lef + 1][rig][cnt1], s);
					}
					
				}
			}
		}
	}
	
	cout << ans << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...