답안 #833382

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
833382 2023-08-22T05:11:54 Z vjudge1 Exam (eJOI20_exam) C++17
12 / 100
70 ms 2724 KB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define fi first
#define se second

const ll N = 1e5+10;

ll n,ans;
ll temp1,temp2;
ll memo[N];
ll h[N],t[N];
bool vis[N];

void sub2() {
	for(int i=1; i<=n; i++) {
		if(h[i] == t[1]) {
			for(int j=i-1; j>=1; j--) {
				if(vis[j]) break;
				if(h[j] < h[i]) {
					h[j] = h[i];
					vis[j] = true;
				}
				else break;
			}
			for(int j=i+1; j<=n; j++) {
				if(vis[j]) break;
				if(h[j] < h[i]) {
					h[j] = h[i];
					vis[j] = true;
				}
				else break;
			}
		}
	}
	for(int i=1; i<=n; i++) if(h[i] == t[i]) ans++;
	cout << ans << endl;
}

ll dp(ll idx) {
	if(idx == 0) return 0;
	if(memo[idx] == -1) {
		ll var = 0;
		memo[idx] = 0;
		if(h[idx] == t[idx]) var++;
		for(int i=idx-1; i>=1; i--) {
			if(h[idx] == t[i]) var++;
			memo[idx] = max(memo[idx],dp(i)+var);
		}
	}
	return memo[idx];
}

int main() {
	memset(memo,-1,sizeof(memo));
	cin >> n;
//	n = 5000;
//	for(int i=1; i<=n; i++) h[i] = i;
//	for(int i=1; i<=n; i++) t[i] = i;
//	temp1 = n-1;
	for(int i=1; i<=n; i++) {
		cin >> h[i];
		if(i > 1 && h[i] > h[i-1]) temp1++;
	}
	for(int i=1; i<=n; i++) {
		cin >> t[i];
		if(i > 1 && t[i] == t[i-1]) temp2++;
	}
	if(temp2 == n-1) {
		sub2();
		return 0;
	}
	if(temp1 == n-1) cout << dp(n) << endl;
//	if(n <= 10) {
//		for(int i=1; i<=n; i++) {
//			bool b = true;
//			ll temp = 0;
//			for(int j=1; j<=i-1; j++) {
//				if(a[i] < a[j]) {
//					b = false;
//					break;
//				}
//				else if(h[i] == t[i]) {
//					temp++;
//				}
//			}
//			if(b) {
//				ans = max(ans,dp(i) + temp);
//			}
//		}
//	}
}

/*
3
1 2 4
2 2 3
*/
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 980 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 1108 KB Output is correct
2 Correct 12 ms 1364 KB Output is correct
3 Correct 36 ms 2484 KB Output is correct
4 Correct 22 ms 2644 KB Output is correct
5 Correct 59 ms 2636 KB Output is correct
6 Correct 23 ms 2644 KB Output is correct
7 Correct 25 ms 2724 KB Output is correct
8 Correct 70 ms 2556 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 980 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 1108 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 980 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 980 KB Output isn't correct
2 Halted 0 ms 0 KB -