답안 #1056517

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1056517 2024-08-13T09:52:01 Z aykhn 메기 농장 (IOI22_fish) C++17
35 / 100
94 ms 15612 KB
#include "fish.h"
#include <bits/stdc++.h>

using namespace std;

const int MXN = 3e2 + 5;

long long dp[2][MXN][MXN], val[MXN][MXN];
long long lft[MXN][MXN], rig[MXN][MXN], in[MXN][MXN];
long long pre[2][MXN][MXN], suf[2][MXN][MXN];
long long mx[MXN];

/*
0 = len[i] < len[i + 1];
1 = len[i] > len[i + 1];
*/
long long max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W) 
{
    for (int i = 0; i < M; i++) val[X[i] + 1][Y[i] + 1] = 1LL * val[X[i] + 1][Y[i] + 1] + 1LL * W[i];
    for (int i = 1; i <= N; i++) 
    {
        for (int j = 1; j <= N; j++)
        {
            lft[i][j] = lft[i][j - 1] + val[i - 1][j];
            rig[i][j] = rig[i][j - 1] + val[i + 1][j];
            in[i][j] = in[i][j - 1] + val[i][j];
        }
    }
    for (int i = 1; i <= N; i++)
    {
        for (int j = 1; j <= N; j++)
        {
            dp[0][i][j] = dp[1][i][j] = lft[i][j] + rig[i][j];
            if (i <= 1) continue;
            dp[0][i][j] = max(dp[0][i][j], pre[0][i - 1][j] + (lft[i][j] + rig[i][j]));
            dp[1][i][j] = max(dp[1][i][j], suf[0][i - 1][j] + (rig[i][j] - in[i][j]));
            // for (int k = 1; k <= N; k++)
            // {
            //     if (k <= j)
            //     {
            //         long long res = (dp[0][i - 1][k] - rig[i - 1][k] - in[i - 1][k]) + (lft[i][j] + rig[i][j]);
            //         dp[0][i][j] = max(dp[0][i][j], res);
            //     }
            //     if (k >= j)
            //     {
            //         long long res = (dp[1][i - 1][k]) + (rig[i][j] - in[i][j]);
            //         dp[1][i][j] = max(dp[1][i][j], res);
            //     }
            // }
            if (i <= 2) continue;
            long long A = pre[1][i - 2][j] + lft[i][j] + rig[i][j];
            long long B = suf[1][i - 2][j] + rig[i][j];
            dp[0][i][j] = max({dp[0][i][j], A, B});
            dp[1][i][j] = max({dp[1][i][j], A, B});
            // for (int k = 1; k <= N; k++)
            // {
            //     long long res = 0;
            //     if (k <= j) 
            //     {
            //         res = (max(dp[0][i - 2][k], dp[1][i - 2][k]) - rig[i - 2][k]) + lft[i][j] + rig[i][j];
            //     }
            //   	if (k >= j)
            //     {
            //         res = max(dp[0][i - 2][k], dp[1][i - 2][k]) + rig[i][j];
            //     }
            //     dp[0][i][j] = max(dp[0][i][j], res);
            //     dp[1][i][j] = max(dp[1][i][j], res);
            // }
            if (i <= 3) continue;
            dp[0][i][j] = max(dp[0][i][j], mx[i - 3] + lft[i][j] + rig[i][j]);
            dp[1][i][j] = max(dp[1][i][j], mx[i - 3] + lft[i][j] + rig[i][j]);
        }
        for (int j = 1; j <= N; j++) 
        {
            pre[0][i][j] = max(pre[0][i][j - 1], dp[0][i][j] - rig[i][j] - in[i][j]);
            pre[1][i][j] = max(pre[1][i][j - 1], max(dp[0][i][j], dp[1][i][j]) - rig[i][j]);
        }
        for (int j = N; j >= 1; j--)
        {
            suf[0][i][j] = max(suf[0][i][j + 1], dp[1][i][j]);
            suf[1][i][j] = max(suf[1][i][j], max(dp[0][i][j], dp[1][i][j]));
        }
        for (int j = 1; j <= N; j++)
        {
            mx[i] = max({mx[i], dp[0][i][j], dp[1][i][j]});
        }
    }
    long long ans = 0;
    for (int i = 1; i <= N; i++) 
    {
        for (int j = 1; j <= N; j++) 
        {
            ans = max({ans, dp[0][i][j], dp[1][i][j]});
        }
    }
    return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Runtime error 77 ms 11600 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Runtime error 94 ms 15612 KB Execution killed with signal 11
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 71 ms 7756 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 0 ms 2652 KB Output is correct
3 Correct 0 ms 2396 KB Output is correct
4 Correct 0 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 0 ms 2396 KB Output is correct
7 Correct 0 ms 2396 KB Output is correct
8 Correct 0 ms 2392 KB Output is correct
9 Correct 1 ms 4952 KB Output is correct
10 Correct 3 ms 7528 KB Output is correct
11 Correct 1 ms 4884 KB Output is correct
12 Correct 4 ms 7516 KB Output is correct
13 Correct 1 ms 3676 KB Output is correct
14 Correct 3 ms 7516 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 0 ms 2652 KB Output is correct
3 Correct 0 ms 2396 KB Output is correct
4 Correct 0 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 0 ms 2396 KB Output is correct
7 Correct 0 ms 2396 KB Output is correct
8 Correct 0 ms 2392 KB Output is correct
9 Correct 1 ms 4952 KB Output is correct
10 Correct 3 ms 7528 KB Output is correct
11 Correct 1 ms 4884 KB Output is correct
12 Correct 4 ms 7516 KB Output is correct
13 Correct 1 ms 3676 KB Output is correct
14 Correct 3 ms 7516 KB Output is correct
15 Correct 3 ms 7516 KB Output is correct
16 Correct 1 ms 3676 KB Output is correct
17 Correct 9 ms 8540 KB Output is correct
18 Correct 9 ms 8540 KB Output is correct
19 Correct 9 ms 8668 KB Output is correct
20 Correct 9 ms 8668 KB Output is correct
21 Correct 9 ms 8656 KB Output is correct
22 Correct 15 ms 9564 KB Output is correct
23 Correct 4 ms 7772 KB Output is correct
24 Correct 8 ms 8284 KB Output is correct
25 Correct 3 ms 7484 KB Output is correct
26 Correct 4 ms 7768 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 0 ms 2652 KB Output is correct
3 Correct 0 ms 2396 KB Output is correct
4 Correct 0 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 0 ms 2396 KB Output is correct
7 Correct 0 ms 2396 KB Output is correct
8 Correct 0 ms 2392 KB Output is correct
9 Correct 1 ms 4952 KB Output is correct
10 Correct 3 ms 7528 KB Output is correct
11 Correct 1 ms 4884 KB Output is correct
12 Correct 4 ms 7516 KB Output is correct
13 Correct 1 ms 3676 KB Output is correct
14 Correct 3 ms 7516 KB Output is correct
15 Correct 3 ms 7516 KB Output is correct
16 Correct 1 ms 3676 KB Output is correct
17 Correct 9 ms 8540 KB Output is correct
18 Correct 9 ms 8540 KB Output is correct
19 Correct 9 ms 8668 KB Output is correct
20 Correct 9 ms 8668 KB Output is correct
21 Correct 9 ms 8656 KB Output is correct
22 Correct 15 ms 9564 KB Output is correct
23 Correct 4 ms 7772 KB Output is correct
24 Correct 8 ms 8284 KB Output is correct
25 Correct 3 ms 7484 KB Output is correct
26 Correct 4 ms 7768 KB Output is correct
27 Runtime error 2 ms 4696 KB Execution killed with signal 11
28 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 71 ms 7756 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 77 ms 11600 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -