Submission #630510

#TimeUsernameProblemLanguageResultExecution timeMemory
630510CSQ31Catfish Farm (IOI22_fish)C++17
52 / 100
548 ms365632 KiB
#include "fish.h" #include <bits/stdc++.h> using namespace std; typedef long long int ll; int f[3001][3001]; ll dp[2][3001][3001]; //0 -> previous is lower //1 -> previous is higher const ll INF = -1e17; long long max_weights(int n, int m, vector<int> X, vector<int> Y,vector<int> W) { for(int i=0;i<m;i++){ X[i]++; Y[i]++; f[X[i]][Y[i]] = W[i]; } for(int i=0;i<=n;i++){ for(int j=0;j<=n;j++)dp[0][i][j] = dp[1][i][j] = INF; } dp[0][0][0] = 0; for(int i=1;i<=n;i++){ ll mx = INF; ll sum = 0; for(int j=0;j<=n;j++){ sum+=f[i-1][j]; mx = max(mx,dp[0][i-1][j] - sum); dp[0][i][j] = max(dp[0][i][j],mx+sum); } mx = INF; sum = 0; for(int j=0;j<=n;j++)sum+=f[i][j]; for(int j=n;j>=0;j--){ mx = max(dp[0][i-1][j]+sum,mx); mx = max(dp[1][i-1][j]+sum,mx); dp[1][i][j] = max(dp[1][i][j],mx - sum); sum-=f[i][j]; } if(i>=2){ sum = 0; mx = INF; for(int j=0;j<=n;j++){ sum+=f[i-1][j]; mx = max(mx,dp[0][i-2][j]); mx = max(mx,dp[1][i-2][j]); dp[0][i][j] = max(dp[0][i][j],mx+sum); } mx = INF; for(int j=n;j>=0;j--){ mx = max(mx,dp[0][i-2][j]+sum); mx = max(mx,dp[1][i-2][j]+sum); dp[0][i][j] = max(dp[0][i][j],mx-sum); sum-=f[i-1][j]; } } } ll ans = 0; for(int i=0;i<=n;i++){ ans = max(ans,dp[0][n][i]); ans = max(ans,dp[1][n][i]); } 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...