Submission #1022926

#TimeUsernameProblemLanguageResultExecution timeMemory
1022926vjudge1메기 농장 (IOI22_fish)C++17
35 / 100
76 ms11100 KiB
#include "fish.h" #include<bits/stdc++.h> using namespace std; #define pb push_back #define ll long long #define pii pair<int, int> #define ff first #define ss second const int MAXN = 300100; int n, w[MAXN], m; pii a[MAXN]; namespace A{ ll solve(){ ll ans = 0; for(int i=1; i<=m; i++){ ans += w[i]; } return ans; } } namespace B{ ll d[3001][3001]; ll dp[3001][3001]; ll pref[3001][3001]; ll ddp[3001][3001]; ll suf[3001]; ll solve(){ for(int i=1; i<=m; i++){ d[a[i].ff][a[i].ss] += w[i]; } for(int i=1; i<=n; i++){ dp[0][i] = -1e18; ddp[0][i] = -1e18; } dp[0][0] = 0; ddp[0][0] = 0; for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ pref[i][j] = pref[i][j - 1] + d[i][j]; } for(int j=0; j<=n; j++){ ddp[i][j] = 0; dp[i][j] = 0; for(int k=0; k<=j; k++){ ddp[i][j] = max(ddp[i][j], ddp[i-1][k] + pref[i-1][j]-pref[i-1][k]); } for(int k=0; k<=n; k++){ ddp[i][j] = max(ddp[i][j], dp[i-1][k]); } dp[i][j] = ddp[i][j]; for(int k=j; k<=n; k++){ dp[i][j] = max(dp[i][j], dp[i-1][k] + pref[i][k] - pref[i][j]); } for(int k=0; k<=j; k++){ dp[i][j] = max(dp[i][j], ddp[i-1][k] + pref[i-1][j] - pref[i-1][k]); } if(i < 2) continue; for(int k=0; k<=n; k++){ //dp[i][j] = max(dp[i][j], dp[i-2][k] + pref[i-1][max(k, j)]); } } } //for(int i=1; i<=n; i++){ // for(int j=0; j<=n; j++){ // cout<<dp[i][j]<<' '; // } // cout<<'\n'; //} ll ans = 0; for(int i=0; i<=n; i++) ans = max(ans, dp[n][i]); return ans; } } long long max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W) { n = N; m = M; for(int i=1; i<=m; i++){ a[i] = {X[i-1]+1, Y[i-1]+1}; } for(int i=1; i<=m; i++){ w[i] = W[i-1]; } int ok1 = 1; for(int i=1; i<=m; i++){ ok1 &= (a[i].ff % 2 == 0); } if(ok1) return A::solve(); if(n <= 300) return B::solve(); return 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...