답안 #151745

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
151745 2019-09-04T13:43:27 Z arnold518 요리 강좌 (KOI17_cook) C++14
0 / 100
5 ms 2808 KB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

const int MAXN = 3000;

int N, M, S, E, T, A[MAXN+10][MAXN+10], B[MAXN+10];
int dp[MAXN+10][MAXN+10], ans=2147483647;
deque<pii> DQ[MAXN+10];

int main()
{
    int i, j;

    scanf("%d%d%d%d%d", &N, &M, &S, &E, &T);
    for(i=1; i<=N; i++) for(j=1; j<=M; j++) scanf("%d", &A[i][j]);
    for(i=1; i<=N; i++) for(j=M; j>=0; j--) A[i][j]+=A[i][j+1];
    for(i=1; i<=N; i++) scanf("%d", &B[i]);

    for(i=2; i<=S; i++) for(j=1; j<=N; j++) dp[j][i]=987654321;
    for(i=S+1; i<=M+1; i++)
    {
        vector<pii> V;
        for(j=1; j<=N; j++)
        {
            while(!DQ[j].empty() && DQ[j].front().second<i-E) DQ[j].pop_front();
            while(!DQ[j].empty() && DQ[j].back().first>=A[j][i-S]+dp[j][i-S]) DQ[j].pop_back();
            DQ[j].push_back({dp[j][i-S]+A[j][i-S], i-S});
            V.push_back({DQ[j].front().first-A[j][i], j});
        }
        sort(V.begin(), V.end());
        if(i==M+1)
        {
            ans=V[0].first;
            break;
        }

        for(j=1; j<=N; j++)
        {
            for(auto it : V)
            {
                if(it.second==j || it.second==B[j]) continue;
                dp[j][i]=it.first+T;
                break;
            }
        }
    }

    printf("%d", ans);
}

Compilation message

cook.cpp: In function 'int main()':
cook.cpp:18:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d%d%d%d", &N, &M, &S, &E, &T);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cook.cpp:19:50: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     for(i=1; i<=N; i++) for(j=1; j<=M; j++) scanf("%d", &A[i][j]);
                                             ~~~~~^~~~~~~~~~~~~~~~
cook.cpp:21:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     for(i=1; i<=N; i++) scanf("%d", &B[i]);
                         ~~~~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 2808 KB Output is correct
2 Incorrect 5 ms 2808 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 2808 KB Output is correct
2 Incorrect 5 ms 2808 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 2808 KB Output is correct
2 Incorrect 5 ms 2808 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 2808 KB Output is correct
2 Incorrect 5 ms 2808 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 2808 KB Output is correct
2 Incorrect 5 ms 2808 KB Output isn't correct
3 Halted 0 ms 0 KB -