답안 #858573

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
858573 2023-10-08T22:16:14 Z LucaIlie 메기 농장 (IOI22_fish) C++17
0 / 100
642 ms 83808 KB
#include "fish.h"
#include <bits/stdc++.h>

using namespace std;

const int MAX_N = 3002;
const int MAX_M = 3e5;
const long long INF = 1e18;
int costCell[MAX_N][MAX_N];
long long dp[MAX_N][MAX_N], dpLower[MAX_N][MAX_N], spX[MAX_N][MAX_N];
vector<int> possibleY[MAX_N];

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]++;
        costCell[X[i]][Y[i]] = W[i];
    }

    for ( int x = 1; x <= n; x++ ) {
        for ( int y = 1; y <= n; y++ ) {
            if ( costCell[x][y] ) {
                possibleY[x].push_back( y - 1 );
                possibleY[x].push_back( y );
                possibleY[x - 1].push_back( y );
                possibleY[x - 1].push_back( y - 1 );
                possibleY[x + 1].push_back( y );
                possibleY[x + 1].push_back( y - 1 );
            }
        }
    }

    possibleY[0].clear();
    possibleY[n + 1].clear();
    for ( int x = 0; x <= n + 1; x++ )
        possibleY[x].push_back( 0 );
    for ( int x = 1; x <= n; x++ ) {
        sort( possibleY[x].begin(), possibleY[x].end() );
        possibleY[x].resize( unique( possibleY[x].begin(), possibleY[x].end() ) - possibleY[x].begin() );
    }

    for ( int x = 1; x <= n; x++ ) {
        for ( int y = 1; y <= n; y++ )
            spX[x][y] = spX[x][y - 1] + costCell[x][y];
    }

    for ( int crtY = 1; crtY <= n; crtY++ )
        dp[0][crtY] = dpLower[0][crtY] = -INF;
    dp[0][0] = dpLower[0][0] = 0;
    for ( int x = 1; x <= n + 1; x++ ) {
        for ( int crtY: possibleY[x] ) {
            dp[x][crtY] = dpLower[x][crtY] = -INF;
            for ( int prevY: possibleY[x - 1] ) {
                if ( prevY <= crtY ) {
                    dpLower[x][crtY] = max( dpLower[x][crtY], dpLower[x - 1][prevY] + spX[x - 1][crtY] - spX[x - 1][prevY] );
                    if ( x >= 2 )
                        dpLower[x][crtY] = max( dpLower[x][crtY], dp[x - 2][prevY] + spX[x - 1][crtY] );

                    dp[x][crtY] = max( dp[x][crtY], dpLower[x - 1][prevY] + spX[x - 1][crtY] - spX[x - 1][prevY] );
                    if ( x >= 2 )
                        dp[x][crtY] = max( dp[x][crtY], dp[x - 2][prevY] + spX[x - 1][crtY] );
                }
                if ( prevY >= crtY ) {
                    if ( x >= 2 )
                        dpLower[x][crtY] = max( dpLower[x][crtY], dp[x - 2][prevY] + spX[x - 1][prevY] );

                    dp[x][crtY] = max( dp[x][crtY], dp[x - 1][prevY] + spX[x][prevY] - spX[x][crtY] );
                    if ( x >= 2 )
                        dp[x][crtY] = max( dp[x][crtY], dp[x - 2][prevY] + spX[x - 1][prevY] );
                }
            }
        }
    }

    return dp[n + 1][0];
}
# 결과 실행 시간 메모리 Grader output
1 Runtime error 292 ms 69036 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Runtime error 642 ms 83808 KB Execution killed with signal 11
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 190 ms 5152 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6492 KB Output is correct
4 Correct 1 ms 6492 KB Output is correct
5 Correct 1 ms 6492 KB Output is correct
6 Correct 1 ms 6492 KB Output is correct
7 Correct 1 ms 6492 KB Output is correct
8 Correct 1 ms 6676 KB Output is correct
9 Correct 2 ms 15452 KB Output is correct
10 Correct 4 ms 26612 KB Output is correct
11 Correct 2 ms 15708 KB Output is correct
12 Incorrect 4 ms 26460 KB 1st lines differ - on the 1st token, expected: '450122905247', found: '449632882918'
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6492 KB Output is correct
4 Correct 1 ms 6492 KB Output is correct
5 Correct 1 ms 6492 KB Output is correct
6 Correct 1 ms 6492 KB Output is correct
7 Correct 1 ms 6492 KB Output is correct
8 Correct 1 ms 6676 KB Output is correct
9 Correct 2 ms 15452 KB Output is correct
10 Correct 4 ms 26612 KB Output is correct
11 Correct 2 ms 15708 KB Output is correct
12 Incorrect 4 ms 26460 KB 1st lines differ - on the 1st token, expected: '450122905247', found: '449632882918'
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6492 KB Output is correct
4 Correct 1 ms 6492 KB Output is correct
5 Correct 1 ms 6492 KB Output is correct
6 Correct 1 ms 6492 KB Output is correct
7 Correct 1 ms 6492 KB Output is correct
8 Correct 1 ms 6676 KB Output is correct
9 Correct 2 ms 15452 KB Output is correct
10 Correct 4 ms 26612 KB Output is correct
11 Correct 2 ms 15708 KB Output is correct
12 Incorrect 4 ms 26460 KB 1st lines differ - on the 1st token, expected: '450122905247', found: '449632882918'
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 190 ms 5152 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 292 ms 69036 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -