Submission #691637

# Submission time Handle Problem Language Result Execution time Memory
691637 2023-01-31T11:03:38 Z penguin133 Visiting Singapore (NOI20_visitingsingapore) C++17
4 / 100
147 ms 262144 KB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define pi pair<int, int>
#define pii pair<int, pi>
#define fi first
#define se second
#ifdef _WIN32
#define getchar_unlocked _getchar_nolock
#endif

int S[5005], T[5005], V[5005], memo[5005][5005][2][2], n, m, k, a, b;
/*
int dp(int x, int y, bool f, bool f2){
	if(y == m + 1)return 0;
	if(x == n + 1)return b * (m - y + 1) + (!f2 ? a : 0);
	if(memo[x][y][f][f2] != -1)return memo[x][y][f][f2];
	int res = max(dp(x+1, y, 1, f2) + b + (!f ? a : 0), dp(x, y+1, f, 1) + b + (!f2 ? a : 0));
	if(S[x] == T[y])res = max(res, dp(x+1, y+1, 0, 0) + V[S[x]]);
	return memo[x][y][f][f2] = res;
}
*/
int dp[5005][5005][2][2];
void solve(){
	cin >> k >> n >> m >> a >> b;
	for(int i=1;i<=k;i++)cin >> V[i];
	for(int i=1;i<=n;i++)cin >> S[i];
	for(int i=1;i<=m;i++)cin >> T[i];
	/*
	memset(memo, -1, sizeof(memo));
	int res = -1e18;
	for(int i=1;i<=n;i++)res = max(res, dp(i, 1, 0, 0));
	cout << res;
	*/
	int res = -1e18;
	for(int i=0;i<=m;i++)dp[0][i][0][0] = dp[0][i][1][1] = dp[0][i][1][0] = dp[0][i][0][1] = -1e18;
	/*
	dp[0][0][0][0] = 0;
	for(int i=1;i<=n;i++){
		int x = i&1;
		dp[x][0][0][0] = 0;
		dp[x][0][0][1] = dp[x][0][1][0] = dp[x][0][1][1] = -1e18;
		for(int j=1;j<=m;j++){
			dp[x][j][0][0] = (S[i] == T[j] ? max({dp[1-x][j-1][0][0], dp[1-x][j-1][0][1], dp[1-x][j-1][1][0], dp[1-x][j-1][1][1]}) + V[S[i]] : (int)-1e18);
			dp[x][j][0][1] = max(dp[x][j-1][0][0] + a + b, dp[x][j-1][0][1] + b);
			dp[x][j][1][0] = max(dp[1-x][j][0][0] + a + b, dp[1-x][j][1][0] + b);
			dp[x][j][1][1] = max({
								dp[1-x][j-1][0][0] + a * 2 + b * 2,
								dp[1-x][j-1][0][1] + a + b * 2,
								dp[1-x][j-1][1][0] + a + b * 2,
								dp[1-x][j-1][1][1] + b * 2
								});
			res = max(res, dp[x][j][0][0] + (m - j) * b + (m == j ? 0 : a));
			res = max(res, dp[x][j][1][0] + (m - j) * b + (m == j ? 0 : a));
			res = max(res, dp[x][j][0][1] + (m - j) * b);
			res = max(res, dp[x][j][1][1] + (m - j) * b);
		}
	}
	*/
	for(int i=1;i<=n;i++){
		int x = i & 1;
		for(int j=1;j<=m;j++){
			if(S[i] == T[j])dp[i][j][0][0] = dp[i-1][j-1][0][0] + V[S[i]];
			else dp[i][j][0][0] = max(dp[i-1][j][0][0], dp[i][j-1][0][0]);
			res = max(res, dp[i][j][0][0]);
		}
	}
	cout << res;
}

main(){
	ios::sync_with_stdio(0);cin.tie(0);
	int tc = 1;
	//cin >> tc;
	for(int tc1=1;tc1<=tc;tc1++){
		// cout << "Case #" << tc1 << ": ";
		solve();
	}
}

Compilation message

VisitingSingapore.cpp: In function 'void solve()':
VisitingSingapore.cpp:62:7: warning: unused variable 'x' [-Wunused-variable]
   62 |   int x = i & 1;
      |       ^
VisitingSingapore.cpp: At global scope:
VisitingSingapore.cpp:72:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   72 | main(){
      | ^~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 1620 KB Output is correct
2 Correct 14 ms 30804 KB Output is correct
3 Correct 2 ms 1876 KB Output is correct
4 Correct 2 ms 4308 KB Output is correct
5 Correct 2 ms 2004 KB Output is correct
6 Correct 6 ms 10836 KB Output is correct
7 Correct 1 ms 1492 KB Output is correct
8 Correct 2 ms 4308 KB Output is correct
9 Correct 10 ms 18408 KB Output is correct
10 Correct 21 ms 35792 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 724 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 48 ms 87040 KB Output is correct
2 Correct 29 ms 41232 KB Output is correct
3 Runtime error 147 ms 262144 KB Execution killed with signal 9
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 48 ms 87040 KB Output is correct
2 Correct 29 ms 41232 KB Output is correct
3 Runtime error 147 ms 262144 KB Execution killed with signal 9
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 48 ms 87040 KB Output is correct
2 Correct 29 ms 41232 KB Output is correct
3 Runtime error 147 ms 262144 KB Execution killed with signal 9
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 596 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 1620 KB Output is correct
2 Correct 14 ms 30804 KB Output is correct
3 Correct 2 ms 1876 KB Output is correct
4 Correct 2 ms 4308 KB Output is correct
5 Correct 2 ms 2004 KB Output is correct
6 Correct 6 ms 10836 KB Output is correct
7 Correct 1 ms 1492 KB Output is correct
8 Correct 2 ms 4308 KB Output is correct
9 Correct 10 ms 18408 KB Output is correct
10 Correct 21 ms 35792 KB Output is correct
11 Incorrect 1 ms 724 KB Output isn't correct
12 Halted 0 ms 0 KB -