Submission #634140

#TimeUsernameProblemLanguageResultExecution timeMemory
634140UtahaCatfish Farm (IOI22_fish)C++17
9 / 100
33 ms8916 KiB
#include "fish.h" #include <bits/stdc++.h> using namespace std; const int maxN = 100005; int n_col = 0; const int max_height = 1; long long dp[maxN][3][max_height + 1]; long long prefix[maxN][max_height + 1]; const long long INF = 1e18; const int UP = 0; const int DOWN = 1; const int STOP = 2; long long max_weights(int N, int M, std::vector<int> X, std::vector<int> Y, std::vector<int> W) { n_col = N + 2; for(int i = 0; i < M; i++) { prefix[X[i] + 1][Y[i] + 1] = W[i]; } for(int i = 0; i < n_col; i++) { for(int j = 0; j < N; j++) { prefix[i][j + 1] += prefix[i][j]; } } // for(int i = 0; i < n_col; i++) { // for(int j = 0; j < prefix[i].size(); j++) { // cout << prefix[i][j] << ' '; // } // cout<<'\n'; // } for(int i = 0; i < n_col; i++) { for(int j = 0; j < 3; j++) { for(int k = 0; k <= max_height; k++) { // printf("%d %d %d %lld\n", i, j, k, dp[i][j][k]); if (i == 0) { if (j != UP) { dp[i][j][k] = -INF; } else { dp[i][j][k] = 0; } } if (i == n_col - 1) break; if (j == UP) { for(int t = k; t <= max_height; t++) { dp[i + 1][UP][t] = max(dp[i + 1][UP][t], dp[i][j][k] + prefix[i + 1][t] - prefix[i + 1][k]); // printf("DEBUG: %d %d %lld\n",i, t, dp[i + 1][UP][t]); } dp[i + 1][STOP][k] = max(dp[i + 1][STOP][k], dp[i][j][k]); } else if(j == STOP) { for(int t = 0; t <= k; t++){ dp[i + 1][DOWN][t] = max(dp[i + 1][DOWN][t], dp[i][j][k] + prefix[i + 1][k] - prefix[i + 1][t]); } // down and immediately up // maybe this case doesn't even exist... for(int t = 0; t <= max_height; t++) { const int height = max(t, k); // printf("check: %d %d %lld % lld\n",i, t, dp[i][j][k], prefix[i + 1][height]); dp[i + 1][UP][t] = max(dp[i + 1][UP][t], dp[i][j][k] + prefix[i + 1][height]); // printf("DEBU2: %d %d %lld\n",i, t, dp[i + 1][UP][t]); } } else{ for(int t = 0; t <= k; t++) { dp[i + 1][DOWN][t] = max(dp[i + 1][DOWN][t], dp[i][j][k] + prefix[i + 1][k] - prefix[i + 1][t]); } // down and immediately up // maybe this case doesn't even exist... for(int t = 0; t <= max_height; t++) { const int height = max(t, k); // printf("check: %d %d %lld % lld\n",i, t, dp[i][j][k], prefix[i + 1][height]); dp[i + 1][UP][t] = max(dp[i + 1][UP][t], dp[i][j][k] + prefix[i + 1][height]); // printf("DEBU2: %d %d %lld\n",i, t, dp[i + 1][UP][t]); } } } } } return dp[n_col - 1][DOWN][0]; }
#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...