답안 #554060

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
554060 2022-04-27T15:44:25 Z tht2005 Sightseeing in Kyoto (JOI22_kyoto) C++17
0 / 100
1 ms 212 KB
#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
const LL INF = numeric_limits<LL>::max();

const int N = 100005;
const int W = 2003;

int w, h, a[N], b[N], n, m, c[W], d[W];
LL f[W][W];

int main() {
    freopen("kyoto.inp", "r", stdin);
    scanf("%d %d", &w, &h);
    for(int i = 1; i <= w; ++i) {
        scanf("%d", a + i);
    }
    n = 0;
    for(int i = 1; i <= w; ++i) {
        c[++n] = i;
        if(i != 1 && i != w) {
            while(n > 1) {
                if(a[c[n]] < a[c[n - 1]] || a[c[n]] < a[i + 1])
                    break;
                --n;
            }
        }
    }
    for(int i = 1; i <= h; ++i) {
        scanf("%d", b + i);
    }
    m = 0;
    for(int i = 1; i <= h; ++i) {
        d[++m] = i;
        if(i != 1 && i != h) {
            while(m > 1) {
                if(b[d[m]] < b[d[m - 1]] || b[d[m]] < b[i + 1])
                    break;
                --m;
            }
        }
    }
    for(int i = 1; i <= n; ++i) {
        for(int j = 1; j <= m; ++j) {
            f[i][j] = INF;
        }
    }
    f[1][1] = 0;
    for(int i = 1; i <= n; ++i) {
        for(int j = 1; j <= m; ++j) {
            if(i != 1) f[i][j] = min(f[i][j], f[i - 1][j] + (LL)b[d[j]] * (c[i] - c[i - 1]));
            if(j != 1) f[i][j] = min(f[i][j], f[i][j - 1] + (LL)a[c[i]] * (d[j] - d[j - 1]));
        }
    }
    printf("%lld", f[n][m]);
    return 0;
}

Compilation message

kyoto.cpp: In function 'int main()':
kyoto.cpp:15:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |     freopen("kyoto.inp", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
kyoto.cpp:16:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |     scanf("%d %d", &w, &h);
      |     ~~~~~^~~~~~~~~~~~~~~~~
kyoto.cpp:18:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |         scanf("%d", a + i);
      |         ~~~~~^~~~~~~~~~~~~
kyoto.cpp:32:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   32 |         scanf("%d", b + i);
      |         ~~~~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -