Submission #925246

#TimeUsernameProblemLanguageResultExecution timeMemory
925246IS_RushdiCatfish Farm (IOI22_fish)C++17
32 / 100
72 ms16720 KiB
#include "fish.h" #include <bits/stdc++.h> using namespace std; long long max_weights(int n,int m,vector<int>x,vector<int>y,vector<int>w){ int mx = *max_element(y.begin(),y.end()); if(mx <= 8){ long long dp[n+1][mx+2][mx+2]{}; int sum[n+1][mx+2]{}; for(int i = 0; i < m; i++) x[i] += 1; for(int i = 0; i < m; i++) y[i] += 1; for(int i = 0; i < m; i++) sum[x[i]][y[i]] += w[i]; long long ans = 0; for(int i = 0; i < 1; i++){ for(int j = 0; j < mx+2; j++){ for(int k = 0; k < mx+2; k++){ dp[i][j][k] = -1e18; } } } dp[0][0][0] = 0; for(int i = 1; i <= n; i++){ for(int j = 0; j < mx+2; j++){ for(int k = 0; k < mx+2; k++){ for(int v = 0; v < mx+2; v++){ long long now = dp[i-1][k][j]; int cur = v; while(cur > max(j,k)) now += sum[i-1][cur--]; cur = k; while(cur > v) now += sum[i][cur--]; dp[i][v][k] = max(dp[i][v][k],now); ans = max(ans,now); } } } } return ans; } mx = *max_element(x.begin(),x.end()); if(mx <= 1){ long long ans = 0; long long ans2 = 0; int cost[n][2]{}; for(int i = 0; i < m; i++){ if(x[i] == 1){cost[y[i]][1] = w[i]; ans += w[i];} if(x[i] == 0){ans2 += w[i];cost[y[i]][0]=w[i];} } if(n == 2 || n == 1) return max(ans,ans2); ans2 = max(ans,ans2); for(int i = 1; i < n; i++){ ans -= cost[i-1][1]; ans += cost[i-1][0]; ans2 = max(ans2,ans); } return ans2; }else{ long long sum = 0; for(int i = 0; i < m; i++) sum += w[i]; return sum; } } // int main(){ // cout << max_weights(5, 4, {0, 1, 4, 3}, {2, 1, 4, 3}, {5, 2, 1, 3}) << '\n'; // }
#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...