#include "fish.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define nL '\n'
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
typedef long long ll;
typedef long double ld;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int, int> pii;
typedef vector<pii> vpii;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef pair<ll, ll> pll;
typedef vector<pll> vpll;
int ipow(int a, int n) {
if (n == 0) return 1;
int x = ipow(a, n/2);
if (n % 2 == 0) return x*x;
return x*x*a;
}
template <typename T>
ostream& operator<<(ostream& stream, const vector<T>& v) {
for (auto elem : v)
stream << elem << " ";
return stream;
}
template <typename T>
istream& operator>>(istream& stream, vector<T>& v){
for(auto &elem : v)
stream >> elem;
return stream;
}
long long smallN(int N, int M, vi X, vi Y,
vi W) {
ll maxY = 0;
for (int i = 0; i < M; i++) maxY = max(maxY, (ll)Y[i]);
maxY++;
vvl mat(N, vl(maxY+1));
for (int i = 0; i < M; i++) mat[X[i]][Y[i]] = W[i];
vector<vvl> dp(N, vvl(maxY+1, vl(maxY+1)));
ll _tmp1 = 0;
for (int j = 0; j <= maxY; j++) {
if (j > 0) _tmp1 += mat[0][j-1];
ll _tmp2 = 0;
for (int k = 0; k <= maxY; k++) {
if (k <= j) {
if (k > 0) _tmp2 -= mat[0][k-1];
} else {
if (k > 0) _tmp2 += mat[1][k-1];
}
dp[1][j][k] = _tmp1+_tmp2;
// cout << j << " " << k << " " << _tmp1+_tmp2 << nL;
}
}
for (int i = 2; i < N; i++) {
ll tmp1 = 0;
for (int j = 0; j <= maxY; j++) {
if (j > 0) tmp1 += mat[i-1][j-1];
ll tmp2 = 0;
for (int k = 0; k <= maxY; k++) {
if (k <= j) {
if (k > 0) tmp2 -= mat[i-1][k-1];
} else {
if (k > 0) tmp2 += mat[i][k-1];
}
ll tmp3 = 0;
for (int l = 0; l <= maxY;l++) {
if (l > k && l <= j) {
if (l > 0) tmp3 -= mat[i-1][l-1];
}
dp[i][j][k] = max(dp[i][j][k], dp[i-1][k][l]+tmp1+tmp2+tmp3);
}
}
}
}
long long res = 0;
for (int i = 0; i <= maxY; i++) {
for (int j = 0; j <= maxY; j++)
res = max(res, dp[N-1][i][j]);
}
return res;
}
vector<vpll> col;
ll sum(ll x, ll y) {
ll res = 0;
for (auto [y_, w] : col[x]) {
if (y_ > y) break;
res += w;
}
return res;
}
long long max_weights(int N, int M, vi X, vi Y,
vi W) {
ll maxY = 0;
for (int i = 0; i < M; i++) maxY = max(maxY, (ll)Y[i]);
maxY++;
// vvl mat(N, vl(maxY+1));
// for (int i = 0; i < M; i++) mat[X[i]][Y[i]] = W[i];
// if (N <= 300 && maxY <= 10) return smallN(N, M, X, Y, W);
col = vector<vpll>(N);
for (int i = 0; i < M; i++) col[X[i]].pb({Y[i]+1, W[i]});
vector<vvl> dp(N, vvl(5, vl(5)));
vvi pos(N, {0});
for (int i = 0; i < M; i++) {
if (X[i]+1 < N) pos[X[i]+1].pb(Y[i]+1);
if (X[i]-1 >= 0) pos[X[i]-1].pb(Y[i]+1);
}
for (int i = 0; i < N; i++) {
sort(all(pos[i]));
sort(all(col[i]));
}
for (int j = 0; j < pos[1].size(); j++) {
for (int k = 0; k < pos[0].size(); k++) {
dp[1][j][k] = max(0LL, sum(0, pos[1][j])-sum(0, pos[0][k]))+max(0LL, sum(1, pos[0][k])-sum(1, pos[1][j]));
}
}
for (int i = 2; i < N; i++) {
for (int j = 0; j < pos[i].size(); j++) {
for (int k = 0; k < pos[i-1].size(); k++) {
for (int l = 0; l < pos[i-2].size();l++) {
ll res = max(0LL, sum(i, pos[i-1][k])-sum(i, pos[i][j]))+max(0LL, sum(i-1, pos[i][j])-sum(i-1, pos[i-2][l])-sum(i-1, pos[i-1][k]));
dp[i][j][k] = max(dp[i][j][k], dp[i-1][k][l]+res);
// cout << i << ": " << pos[i-2][l] << " " << pos[i-1][k] << " " << pos[i][j] << " " << res << nL;
}
}
}
}
long long res = 0;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++)
res = max(res, dp[N-1][i][j]);
}
return res;
}
Compilation message
fish.cpp: In function 'long long int max_weights(int, int, vi, vi, vi)':
fish.cpp:142:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
142 | for (int j = 0; j < pos[1].size(); j++) {
| ~~^~~~~~~~~~~~~~~
fish.cpp:143:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
143 | for (int k = 0; k < pos[0].size(); k++) {
| ~~^~~~~~~~~~~~~~~
fish.cpp:149:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
149 | for (int j = 0; j < pos[i].size(); j++) {
| ~~^~~~~~~~~~~~~~~
fish.cpp:150:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
150 | for (int k = 0; k < pos[i-1].size(); k++) {
| ~~^~~~~~~~~~~~~~~~~
fish.cpp:151:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
151 | for (int l = 0; l < pos[i-2].size();l++) {
| ~~^~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
91 ms |
92864 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Execution timed out |
1100 ms |
49900 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
45 ms |
46416 KB |
Output is correct |
2 |
Correct |
45 ms |
46428 KB |
Output is correct |
3 |
Correct |
76 ms |
44876 KB |
Output is correct |
4 |
Correct |
64 ms |
48464 KB |
Output is correct |
5 |
Correct |
108 ms |
52092 KB |
Output is correct |
6 |
Correct |
108 ms |
51912 KB |
Output is correct |
7 |
Correct |
109 ms |
52048 KB |
Output is correct |
8 |
Correct |
105 ms |
52052 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
420 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Runtime error |
1 ms |
604 KB |
Execution killed with signal 11 |
10 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
420 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Runtime error |
1 ms |
604 KB |
Execution killed with signal 11 |
10 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
420 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Runtime error |
1 ms |
604 KB |
Execution killed with signal 11 |
10 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
45 ms |
46416 KB |
Output is correct |
2 |
Correct |
45 ms |
46428 KB |
Output is correct |
3 |
Correct |
76 ms |
44876 KB |
Output is correct |
4 |
Correct |
64 ms |
48464 KB |
Output is correct |
5 |
Correct |
108 ms |
52092 KB |
Output is correct |
6 |
Correct |
108 ms |
51912 KB |
Output is correct |
7 |
Correct |
109 ms |
52048 KB |
Output is correct |
8 |
Correct |
105 ms |
52052 KB |
Output is correct |
9 |
Correct |
101 ms |
52048 KB |
Output is correct |
10 |
Correct |
101 ms |
29520 KB |
Output is correct |
11 |
Correct |
233 ms |
58960 KB |
Output is correct |
12 |
Correct |
0 ms |
344 KB |
Output is correct |
13 |
Correct |
0 ms |
348 KB |
Output is correct |
14 |
Correct |
0 ms |
348 KB |
Output is correct |
15 |
Correct |
0 ms |
348 KB |
Output is correct |
16 |
Correct |
0 ms |
348 KB |
Output is correct |
17 |
Correct |
0 ms |
348 KB |
Output is correct |
18 |
Correct |
44 ms |
46472 KB |
Output is correct |
19 |
Correct |
44 ms |
46416 KB |
Output is correct |
20 |
Correct |
49 ms |
46428 KB |
Output is correct |
21 |
Correct |
44 ms |
46424 KB |
Output is correct |
22 |
Incorrect |
108 ms |
52052 KB |
1st lines differ - on the 1st token, expected: '45561826463480', found: '45554342130485' |
23 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
91 ms |
92864 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |