Submission #3665338
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
using uint = unsigned int;
using lint = long long int;
using ulint = unsigned long long int;
template<class T = int> using V = vector<T>;
template<class T = int> using VV = V< V<T> >;
template<class T, class U> void assign(V<T>& v, int n, const U& a) { v.assign(n, a); }
template<class T, class... Args> void assign(V<T>& v, int n, const Args&... args) { v.resize(n); for (auto&& e : v) assign(e, args...); }
int main() {
cin.tie(nullptr); ios_base::sync_with_stdio(false);
int n, k; cin >> n >> k;
V<> a(n); for (int i = 0; i < n; ++i) cin >> a[i], --a[i];
V<> b(n); for (int i = 0; i < n; ++i) cin >> b[i], --b[i];
V<> p(n);
for (int i = 0; i < n; ++i) p[a[i]] = b[i];
VV<> c;
bitset<5000> vis;
for (int i = 0; i < n; ++i) if (!vis[i]) {
int t = i;
vis[t] = true;
c.push_back({t});
while ((t = p[t]) != i) {
vis[t] = true;
c.back().push_back(t);
}
}
int cn = c.size();
VV<> mx(cn);
for (int i = 0; i < cn; ++i) {
int m = c[i].size();
mx[i].resize(m + 1, -1e9);
if (m == 1) {
mx[i][1] = c[i][0];
continue;
}
if (m == 2) {
mx[i][1] = 2 * max(c[i][0], c[i][1]);
mx[i][2] = c[i][0] + c[i][1];
continue;
}
VV<> dpl, dpr;
assign(dpl, m, m + 1, -1e9), assign(dpr, m, m + 1, -1e9);
dpl[0][1] = c[i][0];
for (int j = 1; j < m - 1; ++j) {
for (int x = 1; x <= j + 1; ++x) {
dpl[j][x] = max(dpl[j][x], dpl[j - 1][x - 1] + c[i][j]);
dpl[j][x] = max(dpl[j][x], dpr[j - 1][x] + c[i][j]);
dpr[j][x] = max(dpr[j][x], dpl[j - 1][x - 1] + c[i][j + 1]);
dpr[j][x] = max(dpr[j][x], dpr[j - 1][x - 1] + c[i][j + 1]);
}
}
for (int x = 1; x <= m; ++x) {
mx[i][x] = max(mx[i][x], dpl[m - 2][x - 1] + c[i][m - 1]);
mx[i][x] = max(mx[i][x], dpr[m - 2][x] + c[i][m - 1]);
mx[i][x] = max(mx[i][x], dpl[m - 2][x] + c[i][0]);
mx[i][x] = max(mx[i][x], dpr[m - 2][x] + c[i][0]);
}
assign(dpl, m, m + 1, -1e9), assign(dpr, m, m + 1, -1e9);
dpr[0][1] = c[i][1];
for (int j = 1; j < m - 1; ++j) {
for (int x = 1; x <= j + 1; ++x) {
dpl[j][x] = max(dpl[j][x], dpl[j - 1][x - 1] + c[i][j]);
dpl[j][x] = max(dpl[j][x], dpr[j - 1][x] + c[i][j]);
dpr[j][x] = max(dpr[j][x], dpl[j - 1][x - 1] + c[i][j + 1]);
dpr[j][x] = max(dpr[j][x], dpr[j - 1][x - 1] + c[i][j + 1]);
}
}
for (int x = 1; x <= m; ++x) {
mx[i][x] = max(mx[i][x], dpl[m - 2][x - 1] + c[i][m - 1]);
mx[i][x] = max(mx[i][x], dpr[m - 2][x] + c[i][m - 1]);
mx[i][x] = max(mx[i][x], dpl[m - 2][x - 1] + c[i][0]);
mx[i][x] = max(mx[i][x], dpr[m - 2][x - 1] + c[i][0]);
}
}
VV<> dp; assign(dp, cn + 1, n + 1, -1e9);
dp[0][0] = n;
for (int i = 0; i < cn; ++i) {
for (int x = 1; x <= n; ++x) {
for (int j = min<int>(c[i].size(), x); j > 0; --j) {
dp[i + 1][x] = max(dp[i + 1][x], dp[i][x - j] + mx[i][j]);
}
}
}
int res = 0;
for (int x = k; x <= n; ++x) res = max(res, dp[cn][x]);
cout << res << '\n';
}
Submission Info
Submission Time |
|
Task |
G - Sum of Cards |
User |
risujiroh |
Language |
C++14 (GCC 5.4.1) |
Score |
500 |
Code Size |
3202 Byte |
Status |
AC |
Exec Time |
203 ms |
Memory |
178304 KB |
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
500 / 500 |
Status |
|
|
Set Name |
Test Cases |
Sample |
s1.txt, s2.txt, s3.txt |
All |
01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, s1.txt, s2.txt, s3.txt |
Case Name |
Status |
Exec Time |
Memory |
01.txt |
AC |
1 ms |
256 KB |
02.txt |
AC |
1 ms |
256 KB |
03.txt |
AC |
1 ms |
256 KB |
04.txt |
AC |
1 ms |
256 KB |
05.txt |
AC |
1 ms |
256 KB |
06.txt |
AC |
1 ms |
384 KB |
07.txt |
AC |
2 ms |
640 KB |
08.txt |
AC |
2 ms |
512 KB |
09.txt |
AC |
2 ms |
640 KB |
10.txt |
AC |
2 ms |
384 KB |
11.txt |
AC |
1 ms |
384 KB |
12.txt |
AC |
1 ms |
384 KB |
13.txt |
AC |
2 ms |
640 KB |
14.txt |
AC |
2 ms |
512 KB |
15.txt |
AC |
1 ms |
384 KB |
16.txt |
AC |
139 ms |
119424 KB |
17.txt |
AC |
65 ms |
25660 KB |
18.txt |
AC |
99 ms |
68320 KB |
19.txt |
AC |
106 ms |
80768 KB |
20.txt |
AC |
84 ms |
30720 KB |
21.txt |
AC |
119 ms |
93696 KB |
22.txt |
AC |
158 ms |
138752 KB |
23.txt |
AC |
203 ms |
178304 KB |
24.txt |
AC |
78 ms |
46848 KB |
25.txt |
AC |
148 ms |
126720 KB |
26.txt |
AC |
170 ms |
145896 KB |
27.txt |
AC |
74 ms |
28416 KB |
28.txt |
AC |
55 ms |
25828 KB |
29.txt |
AC |
171 ms |
147584 KB |
30.txt |
AC |
171 ms |
145152 KB |
31.txt |
AC |
38 ms |
13696 KB |
32.txt |
AC |
44 ms |
15616 KB |
33.txt |
AC |
50 ms |
17792 KB |
34.txt |
AC |
33 ms |
11904 KB |
35.txt |
AC |
48 ms |
17408 KB |
36.txt |
AC |
108 ms |
53760 KB |
37.txt |
AC |
108 ms |
85248 KB |
38.txt |
AC |
67 ms |
22784 KB |
39.txt |
AC |
83 ms |
55332 KB |
40.txt |
AC |
106 ms |
67776 KB |
s1.txt |
AC |
1 ms |
256 KB |
s2.txt |
AC |
1 ms |
256 KB |
s3.txt |
AC |
1 ms |
256 KB |