# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1234756 | MuhammadSaram | 메기 농장 (IOI22_fish) | C++20 | 0 ms | 0 KiB |
#include "fish.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
long long max_weights(int n, int m, vector<int> x, vector<int> y,vector<int> w)
{
ll a[n][n]={};
vector<int>
for (int i=0;i<m;i++)
a[x[i]][y[i]+1]=w[i];
for (int i=0;i<n;i++)
for (int j=1;j<=n;j++)
a[i][j]+=a[i][j-1];
ll dp[2][n+1][n+1]={};
for (int i=0;i<=n;i++)
for (int j=i;j<=n;j++)
{
if (i==j)
dp[1][i][j]=a[0][j];
else
dp[1][i][j]=a[1][j]-a[1][i];
}
for (int i=2;i<n;i++)
{
for (int h=0;h<=n;h++)
for (int h1=h;h1<=n;h1++)
for (int h2=h1*(h<h1);h2<=h1;h2++)
for (int h3=h2;h3<=n;h3++)
dp[i%2][h][h1]=max(dp[i%2][h][h1],dp[1-i%2][h2][h3]+max(0ll,a[i][h1]-a[i][h])+max(0ll,a[i-1][h]-a[i-1][h3]));
}
ll ans=0;
for (int i=0;i<=n;i++)
for (int j=i;j<=n;j++)
ans=max(ans,dp[1-n%2][i][j]);
return ans;
}