Submission #749576

#TimeUsernameProblemLanguageResultExecution timeMemory
749576farhan132Catfish Farm (IOI22_fish)C++17
52 / 100
798 ms152876 KiB
#include "fish.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef double dd; typedef pair<ll , ll> ii; typedef tuple < ll, ll, ll > tp; const ll INF = (ll)1e18; #define mem(a , b) memset(a, b ,sizeof(a)) const ll N = 3005; ll dp[2][2][2][N], pref[2][2][2][N], suf[2][2][2][N]; ll a[N][N]; ll n; long long max_weights(int _n, int m, std::vector<int> X, std::vector<int> Y, std::vector<int> W) { n = _n; mem(a, 0); mem(dp, 0); mem(pref, 0); for(ll i = 0; i < m; i++){ a[X[i]][Y[i] + 1] = W[i]; } for(ll i = 0; i < n; i++){ for(ll j = 1; j <= n; j++){ a[i][j] += a[i][j - 1]; } } ll row = 0; ll ans = 0; for(ll i = 0; i < n; i++){ row ^= 1; // 0 -> i-1 > i, i > i+1 // 1 -> i-1 < i, i < i+1 // 0 -> sz[i-1] < sz[i], sz[i] < sz[i+1] // 1 -> sz[i-1] > sz[i], sz[i] > sz[i+1] for(ll j = 0; j <= n; j++){ for(ll c = 0; c < 2; c++) dp[row][c][0][j] = dp[row][c][1][j] = -INF; } for(ll l = 0; l < 2; l++){ for(ll d1 = 0; d1 < 2; d1++){ for(ll r = 0; r < 2; r++){ for(ll d2 = 0; d2 < 2; d2++){ if((!l && d1) && (r && !d2)) continue; for(ll j = 0; j <= n; j++){ ll V = 0; if(l == 0 && d1){ V = suf[1-row][l][d1][j] - a[i][j]; }else if(l == 0){ V = pref[1-row][l][d1][j]; } if(l == 1 && !d1){ V = pref[1-row][l][d1][j] + (i > 0 ? a[i - 1][j] : 0); }else if(l == 1){ V = suf[1-row][l][d1][j]; } if(r == 0 && d2){ V += a[i + 1][j]; } if(r == 1 && !d2){ V -= a[i][j]; } dp[row][r][d2][j] = max(dp[row][r][d2][j], V); ans = max(ans, V); } } } } } // cout << i << ' ' << ans << '\n'; for(ll c = 0; c < 2; c++){ for(ll d = 0; d < 2; d++){ for(ll j = n; j >= 0; j--){ suf[row][c][d][j] = max(suf[row][c][d][j + 1], dp[row][c][d][j]); } for(ll j = 0; j <= n; j++){ pref[row][c][d][j] = max(dp[row][c][d][j], (j > 0 ? pref[row][c][d][j - 1]: -INF)); } } } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...