Submission #1320695

#TimeUsernameProblemLanguageResultExecution timeMemory
1320695ezzzay메기 농장 (IOI22_fish)C++17
0 / 100
1010 ms2162688 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ff first #define ss second #define pb push_back vector<pair<int,int>> vc[310]; long long max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W) { vector<vector<ll>> dp(N+2, vector<ll>(N+2, 0)); vector<vector<ll>> ps(N+2, vector<ll>(N+2, 0)); for(int i = 0; i <= N; i++) vc[i].clear(); for(int i = 0; i < M; i++){ vc[X[i] + 1].pb({Y[i] + 1, W[i]}); } // 🔴 REQUIRED: sort by Y for(int i = 1; i <= N; i++){ sort(vc[i].begin(), vc[i].end()); } ll mx = 0; for(int i = 1; i <= N; i++){ int idx = 0; // build prefix sums for row i for(int l = 1; l <= N; l++){ ps[i][l] = ps[i][l-1]; while(idx < (int)vc[i].size() && vc[i][idx].ff <= l){ ps[i][l] += vc[i][idx].ss; idx++; } } // DP transitions for(int j = 0; j <= N; j++){ int l = min(i, j); int r = max(i, j); dp[i][j] = max(dp[i][j], dp[i-1][j] + ps[i-1][r] - ps[i-1][l-1]); if(i >= 2){ dp[i][j] = max(dp[i][j], dp[i-2][j] + ps[i-1][r]); } mx = max(mx, dp[i][j]); } } return mx; }
#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...