답안 #58982

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
58982 2018-07-20T01:15:57 Z red1108 요리 강좌 (KOI17_cook) C++17
22 / 100
303 ms 67240 KB
#include <vector>
#include <stdio.h>
#include <deque>
using namespace std;
const int inf=2147483647;
vector<vector<int>> input,sum;
vector<int> dp[3010];
struct DATA{
    int value;
    int before;
}mindp[6010][3];
deque<pair<int,int>> dq[3010];
int n, m, row, limit, change, cant[3010];
int getmin(int i, int j)
{
    if(i<row) return (-1)*change;
    if(mindp[i][0].before!=cant[j]&&mindp[i][0].before!=j) return mindp[i][0].value;
    else if(mindp[i][1].before!=cant[j]&&mindp[i][1].before!=j) return mindp[i][1].value;
    else if(mindp[i][2].before!=cant[j]&&mindp[i][2].before!=j) return mindp[i][2].value;
}
void gang(int i, int j,int bac)
{
    if(mindp[i][0].value==0)mindp[i][0].value=mindp[i][1].value=mindp[i][2].value=inf;
    if(j<1) return;
    if(mindp[i][0].value>=j)
    {
        mindp[i][2]=mindp[i][1];
        mindp[i][1]=mindp[i][0];
        mindp[i][0].value=j;
        mindp[i][0].before=bac;
    }
    else if(mindp[i][1].value>=j)
    {
        mindp[i][2]=mindp[i][1];
        mindp[i][1].value=j;
        mindp[i][1].before=bac;
    }
    else if(mindp[i][2].value>=j)
    {
        mindp[i][2].value=j;
        mindp[i][2].before=bac;
    }
}
int main()
{
    int i, j, ina;
    scanf("%d %d %d %d %d", &n, &m, &row, &limit, &change);
    input.push_back(vector<int>{0});
    sum.push_back(vector<int>{0});
    for(i=1;i<=n;i++)
    {
        input.push_back(vector<int>{0});
        sum.push_back(vector<int>{0});
        dp[i].push_back(0);
        for(j=1;j<=m;j++)
        {
            scanf("%d",&ina);
            input[i].push_back(ina);
            sum[i].push_back(sum[i][j-1]+ina);
            dp[i].push_back(0);
        }
        for(j=1;j<=m;j++) {sum[i].push_back(sum[i][sum[i].size()-1]);input[i].push_back(0);dp[i].push_back(0);}
    }
    for(i=1;i<=n;i++) scanf("%d", &cant[i]);
    for(i=row;i<=m+row-1;i++)
    {
        for(j=1;j<=n;j++)
        {
            while(!dq[j].empty()&&dq[j].front().second<i-limit+1) dq[j].pop_front();
            pair<int,int> newput={getmin(i-row,j)+change,i-row+1};
            if(i-row>=row||i<=limit){
                if(i-row<row&&i<=limit) newput.second=1;
                while(!dq[j].empty()&&(dq[j].back().first+sum[j][i]-sum[j][dq[j].back().second-1]>=newput.first+sum[j][i]-sum[j][i-row]||dq[j].back().second<i-limit+1)) dq[j].pop_back();
                dq[j].push_back(newput);
            }
            dp[j][i]=dq[j].front().first+sum[j][i]-sum[j][dq[j].front().second-1];
            gang(i,dp[j][i],j);
        }
    }
    int ans=inf;
    for(i=1;i<=n;i++)
    {
        for(j=m;j<=m+row-1;j++)
        {
            ans=dp[i][j]<ans&&dp[i][j]>0?dp[i][j]:ans;
        }
    }
    printf("%d",ans);
}

Compilation message

cook.cpp: In function 'int getmin(int, int)':
cook.cpp:20:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
cook.cpp: In function 'int main()':
cook.cpp:47: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, &row, &limit, &change);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cook.cpp:57:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d",&ina);
             ~~~~~^~~~~~~~~~~
cook.cpp:64:28: 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", &cant[i]);
                       ~~~~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 2424 KB Output is correct
2 Correct 8 ms 2544 KB Output is correct
3 Correct 7 ms 2796 KB Output is correct
4 Correct 8 ms 2796 KB Output is correct
5 Correct 6 ms 2872 KB Output is correct
6 Correct 6 ms 2948 KB Output is correct
7 Correct 8 ms 2964 KB Output is correct
8 Correct 7 ms 3036 KB Output is correct
9 Correct 6 ms 3036 KB Output is correct
10 Correct 5 ms 3036 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 2424 KB Output is correct
2 Correct 8 ms 2544 KB Output is correct
3 Correct 7 ms 2796 KB Output is correct
4 Correct 8 ms 2796 KB Output is correct
5 Correct 6 ms 2872 KB Output is correct
6 Correct 6 ms 2948 KB Output is correct
7 Correct 8 ms 2964 KB Output is correct
8 Correct 7 ms 3036 KB Output is correct
9 Correct 6 ms 3036 KB Output is correct
10 Correct 37 ms 7100 KB Output is correct
11 Correct 30 ms 7100 KB Output is correct
12 Correct 29 ms 8012 KB Output is correct
13 Correct 23 ms 8012 KB Output is correct
14 Correct 37 ms 8756 KB Output is correct
15 Correct 42 ms 9228 KB Output is correct
16 Correct 35 ms 9688 KB Output is correct
17 Correct 30 ms 9688 KB Output is correct
18 Correct 35 ms 10508 KB Output is correct
19 Correct 24 ms 10508 KB Output is correct
20 Correct 5 ms 3036 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 2424 KB Output is correct
2 Correct 8 ms 2544 KB Output is correct
3 Correct 7 ms 2796 KB Output is correct
4 Correct 8 ms 2796 KB Output is correct
5 Correct 6 ms 2872 KB Output is correct
6 Correct 6 ms 2948 KB Output is correct
7 Correct 8 ms 2964 KB Output is correct
8 Correct 7 ms 3036 KB Output is correct
9 Correct 6 ms 3036 KB Output is correct
10 Correct 37 ms 7100 KB Output is correct
11 Correct 30 ms 7100 KB Output is correct
12 Correct 29 ms 8012 KB Output is correct
13 Correct 23 ms 8012 KB Output is correct
14 Correct 37 ms 8756 KB Output is correct
15 Correct 42 ms 9228 KB Output is correct
16 Correct 35 ms 9688 KB Output is correct
17 Correct 30 ms 9688 KB Output is correct
18 Correct 35 ms 10508 KB Output is correct
19 Correct 24 ms 10508 KB Output is correct
20 Incorrect 302 ms 48832 KB Output isn't correct
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 2424 KB Output is correct
2 Correct 8 ms 2544 KB Output is correct
3 Correct 7 ms 2796 KB Output is correct
4 Correct 8 ms 2796 KB Output is correct
5 Correct 6 ms 2872 KB Output is correct
6 Correct 6 ms 2948 KB Output is correct
7 Correct 8 ms 2964 KB Output is correct
8 Correct 7 ms 3036 KB Output is correct
9 Correct 6 ms 3036 KB Output is correct
10 Correct 37 ms 7100 KB Output is correct
11 Correct 30 ms 7100 KB Output is correct
12 Correct 29 ms 8012 KB Output is correct
13 Correct 23 ms 8012 KB Output is correct
14 Correct 37 ms 8756 KB Output is correct
15 Correct 42 ms 9228 KB Output is correct
16 Correct 35 ms 9688 KB Output is correct
17 Correct 30 ms 9688 KB Output is correct
18 Correct 35 ms 10508 KB Output is correct
19 Correct 24 ms 10508 KB Output is correct
20 Correct 298 ms 48832 KB Output is correct
21 Correct 298 ms 48832 KB Output is correct
22 Correct 279 ms 52600 KB Output is correct
23 Correct 303 ms 57516 KB Output is correct
24 Correct 262 ms 62476 KB Output is correct
25 Incorrect 274 ms 67240 KB Output isn't correct
26 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 2424 KB Output is correct
2 Correct 8 ms 2544 KB Output is correct
3 Correct 7 ms 2796 KB Output is correct
4 Correct 8 ms 2796 KB Output is correct
5 Correct 6 ms 2872 KB Output is correct
6 Correct 6 ms 2948 KB Output is correct
7 Correct 8 ms 2964 KB Output is correct
8 Correct 7 ms 3036 KB Output is correct
9 Correct 6 ms 3036 KB Output is correct
10 Correct 37 ms 7100 KB Output is correct
11 Correct 30 ms 7100 KB Output is correct
12 Correct 29 ms 8012 KB Output is correct
13 Correct 23 ms 8012 KB Output is correct
14 Correct 37 ms 8756 KB Output is correct
15 Correct 42 ms 9228 KB Output is correct
16 Correct 35 ms 9688 KB Output is correct
17 Correct 30 ms 9688 KB Output is correct
18 Correct 35 ms 10508 KB Output is correct
19 Correct 24 ms 10508 KB Output is correct
20 Incorrect 302 ms 48832 KB Output isn't correct
21 Halted 0 ms 0 KB -