답안 #661020

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
661020 2022-11-23T21:47:13 Z mychecksedad 메기 농장 (IOI22_fish) C++17
컴파일 오류
0 ms 0 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
#define pb push_back
const int S = 1e5 + 100;


ll dp[S][15][2], a[S][2], s[S], pref[S][15], dppref[S][15], dpsuf[S][15];
long long max_weights(int n, int m, std::vector<int> x, std::vector<int> y, std::vector<int> w){  
    bool case1 = 1, case2 = 1;
    for(int i = 0; i < m; ++i){
        if(x[i] % 2) case1 = 0;
        if(x[i] > 1) case2 = 0;
    }
    if(case1){
        ll ans = 0;
        for(int i = 0; i < m; ++i) ans += w[i];
        return ans;
    }
    if(case2){
        ll ans1 = 0, ans2 = 0;

        for(int i = 0; i < m; ++i){
            if(x[i] == 0) ans1 += w[i];
            else ans2 += w[i];
        }
        if(n == 2)
            return max(ans1, ans2);
        else{
            ll best = 0, sum = 0;
            int p = 0;
            for(int i = 0; i <= n + 1; ++i) a[i][0] = a[i][1] = s[i] = 0;
            for(int i = 0; i < m; i++) if(x[i] == 0) a[y[i]][0] = w[i]; else a[y[i]][1] = w[i];

            for(int i = n; i >= 0; --i) s[i] = s[i + 1] + a[i][1];

            for(int i = 0; i <= n + 1; ++i){
                best = max(best, s[i] + sum);
                sum += a[i][0];
            }

            return best;
        }
    }
    for(int i = 0; i <= n + 5; ++i){
        for(int j = 0; j < 15; ++j) pref[i][j] = dp[i][j][0] = dp[i][j][1] = dppref[i][j] = dpsuf[i][j] = 0;
    }
    for(int i = 0; i < m; ++i) pref[x[i]][y[i] + 1] = w[i];

    for(int i = 0; i <= n; ++i){
        for(int j = 1; j < 15; ++j) pref[i][j] += pref[i][j - 1];
    }
    for(int i = 0; i <= n; ++i){
        for(int j = 0; j < 10; ++j){    
            if(i == 0){
                dp[i][j][0] = dp[i][j][1] = pref[i + 1][j];
                continue;
            }

            dp[i][j][0] = pref[i + 1][j] + pref[i - 1][j] + dppref[i - 1][j];

            dp[i][j][1] = pref[i + 1][j] - pref[i][j] + dpsuf[i - 1][j];
        }

        for(int j = 0; j < 10; ++j){
            if(j == 0) dppref[i][j] = dp[i][j][0] - pref[i + 1][j] - pref[i][j];
            else dppref[i][j] = max(dppref[i][j - 1], dp[i][j][0] - pref[i + 1][j] - pref[i][j]);
        }

        for(int j = 9; j >= 0; --j){
            if(j == 9) dpsuf[i][j] = max(dp[i][j][0], dp[i][j][1]);
            else dpsuf[i][j] = max({dpsuf[i][j + 1], dp[i][j][0], dp[i][j][1]});
        }
    }
    return max(dp[n][0][0], dp[n][0][1]);
}   
2

Compilation message

fish.cpp: In function 'long long int max_weights(int, int, std::vector<int>, std::vector<int>, std::vector<int>)':
fish.cpp:31:17: warning: unused variable 'p' [-Wunused-variable]
   31 |             int p = 0;
      |                 ^
fish.cpp: At global scope:
fish.cpp:77:1: error: expected unqualified-id before numeric constant
   77 | 2
      | ^