Submission #1055983

#TimeUsernameProblemLanguageResultExecution timeMemory
1055983mychecksedadCatfish Farm (IOI22_fish)C++17
52 / 100
904 ms2097156 KiB
#include "fish.h" #include<bits/stdc++.h> using namespace std; #define pb push_back #define all(x) x.begin(),x.end() #define ll long long int #define en cout << '\n' #define pi pair<int,int> #define vi vector<int> #define ff first #define ss second const int N = 3005; ll dp[N][N], pref[N][N], mx[N], dp2[N][N], suf[N][N]; long long max_weights(int n, int m, std::vector<int> X, std::vector<int> Y, std::vector<int> W) { vector<vector<ll>> a(n + 1, vector<ll>(n + 1)); for(int i = 0; i < m; ++i){ a[X[i]][Y[i] + 1] = W[i]; } for(int i = 0; i < n; ++i){ pref[i][0] = a[i][0]; for(int j = 1; j <= n; ++j) pref[i][j] = pref[i][j - 1] + a[i][j]; } for(int i = 0; i <= n; ++i) dp[0][i] = pref[1][i], dp2[0][i] = pref[1][i]; mx[0] = pref[1][n]; suf[0][n + 1] = 0; for(int j = n; j >= 0 ;--j) suf[0][j] = max(suf[0][j + 1], dp[0][j]); for(int i = 1; i < n; ++i){ mx[i] = 0; ll mx_pref = 0, mx_pref2 = 0; for(int j = 0; j <= n; ++j){ ll add = pref[i + 1][j] + pref[i - 1][j]; dp[i][j] = add; if(i > 2) dp[i][j] = max(dp[i][j], mx[i - 3] + add); dp2[i][j] = dp[i][j]; } for(int j = 0; j <= n; ++j){ ll add = pref[i + 1][j] + pref[i - 1][j]; // cout << i << ' ' << j << ' ' << add1 << ' ' <<add2 << ' '; ll x = add - pref[i - 1][j] - pref[i][j]; // for(int j2 = j + 1; j2 <= n; ++j2){ // dp[i][j] = max(dp[i][j], dp[i - 1][j2] + x); // } mx_pref2 = max(mx_pref2, dp2[i - 1][j] - pref[i - 1][j] - pref[i][j]); dp[i][j] = max(dp[i][j], mx_pref2 + add); dp2[i][j] = max(dp2[i][j], mx_pref2 + add); dp[i][j] = max(dp[i][j], suf[i - 1][j] + x); if(i > 1){ mx_pref = max(mx_pref, dp[i - 2][j] - pref[i - 1][j]); dp[i][j] = max(dp[i][j], mx_pref + add); dp[i][j] = max(dp[i][j], suf[i - 2][j] - pref[i - 1][j]); dp2[i][j] = max(dp2[i][j], mx_pref + add); dp2[i][j] = max(dp2[i][j], suf[i - 2][j] - pref[i - 1][j]); } // cout << dp[i][j] << '\n'; } for(int j = 0; j <= n; ++j) mx[i] = max(mx[i], dp[i][j]); suf[i][n + 1] = 0; // suf2[i][n] = dp[i][n]; for(int j = n; j >= 0 ;--j) suf[i][j] = max(suf[i][j + 1], dp[i][j]); // for(int j = n-1; j >= 0 ;--j) suf2[i][j] = max(suf2[i][j + 1], dp[i][j]); // en; } ll ans = mx[n - 1]; 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...