# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1080917 | 2024-08-29T15:59:57 Z | allin27x | 메기 농장 (IOI22_fish) | C++17 | 0 ms | 0 KB |
#include <bits/stdc++.h> using namespace std; #define int long long const int N= 305; int dp[N][N][N]; int sfm[N]; int fs[N][9]; long long max_weights(signed n, signed m, std::vector<signed> x, std::vector<signed> y, std::vector<signed> w){ for (int i=0; i<m; i++) fs[x[i]][y[i]] = w[i]; for (int h0=0; h0<=n; h0++) { for (int h1=0; h1<=n; h1++) { if (h0 < h1) { for (int r = h0; r<h1; r++) dp[1][h0][h1] += fs[0][r]; } if (h0 > h1) { for (int r = h1; r< h0; r++) dp[1][h0][h1] += fs[1][r]; } } } for (int i=2; i<n; i++) { for (int h0=0; h0<=n; h0++) { int mm = 0; for (int t=0; t<=h0; t++) mm = max(mm, dp[i-1][t][h0]); sfm[n] = dp[i-1][n][h0]; for (int j=n-1; j>=0; j--) sfm[j] = max(sfm[j+1], dp[i-1][j][h0]); int s = 0; for (int h=0; h<h0; h++) s += fs[i][h]; int s1 = 0; for (int h=0; h<=h0; h++) { dp[i][h0][h] = max(dp[i][h0][h], s - s1 + sfm[0]); s1 += fs[i][h]; } int mx = mm; for (int h= h0; h<n; h++) { mx = max(mx + fs[i-1][h], dp[i-1][h+1][h0]); int r = max(mx, sfm[h+1]); dp[i][h0][h+1] = max(dp[i][h0][h+1], r); } } // } // for (int i=0; i<=n; i++) { // for (int j=0; j<=n; j++) { // cout<<i<<' '<<j<<' '<<dp[4][i][j]<<'\n'; // } // } int ans = 0; for (int h0=0; h0<=n; h0++) { for (int h1=0; h1<=n; h1++) { ans = max(ans, dp[n-1][h0][h1]); } } return ans; }