Submission #858571

# Submission time Handle Problem Language Result Execution time Memory
858571 2023-10-08T22:15:28 Z LucaIlie Catfish Farm (IOI22_fish) C++17
0 / 100
603 ms 50316 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 );
            }
        }
    }

    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] );
                }
            }
            printf( "(%d %lld) ", crtY, dpLower[x][crtY] );
        }
        printf( "\n" );
    }

    return dp[n + 1][0];
}
# Verdict Execution time Memory Grader output
1 Runtime error 239 ms 50316 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 6492 KB Possible tampering with the output
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 603 ms 4864 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 6492 KB Possible tampering with the output
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 6492 KB Possible tampering with the output
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 6492 KB Possible tampering with the output
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 603 ms 4864 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 239 ms 50316 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -