답안 #778038

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
778038 2023-07-10T04:13:32 Z BamshooT K개의 묶음 (IZhO14_blocks) C++14
0 / 100
1 ms 340 KB
#include <iostream>
#include <algorithm>

#define ll long long
#define inf 1e9
#define FOR(i, a, b) for (int i = a; i <= b; ++i)

using namespace std;

const int N = 1e5 + 9;
int n, k,  st[N*4];
ll dp[109][N], a[N], p[109][N];

void build(int id, int l, int r){
    if (l==r) {
        st[id] = a[l];
        return;
    }
    int mid = l+r>>1;
    build(id*2, l, mid); build(id*2+1, mid+1, r);
    st[id] =  max(st[id*2], st[id*2+1]);
}
ll get(int id, int l, int r, int u, int v){
    if (v < l || u > r) return -1;
    if (u <= l && r <= v) return st[id];
    int mid = l+r>>1;
    return max(get(id*2, l, mid, u, v), get(id*2+1, mid+1, r, u, v));
}

void solve(int k, int l, int r, int from, int to){
    if (l > r) return;
    int mid = l+r>>1;
    dp[k][mid] = inf;
    p[k][mid] = from;
    for (int i = from; i <= min(mid-1, to); ++i){
        ll new_cost = dp[k-1][i] + get(1, 1, n, i+1, mid);
        if (new_cost < dp[k][mid]) {
            dp[k][mid] = new_cost;
            p[k][mid] = i;
        }
    }
    solve(k, l, mid-1, from, p[k][mid]);
    solve(k, mid+1, r, p[k][mid], to);
}
int main() {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  //  freopen("nhap.inp", "r", stdin);
   // freopen("xuat.out", "w", stdout);
    cin >> n >> k;
    FOR(i, 1, n) cin >> a[i];
    build(1, 1, n);
    FOR(i, 1, k) FOR(j,1 ,n) dp[i][j] = inf;
    FOR(i, 1, n) dp[1][i] = max(dp[1][i-1], a[i]);
    FOR(t, 2, k) solve(t, 1, n, 1, n);
    cout << dp[k][n];
    return 0;
}

Compilation message

blocks.cpp: In function 'void build(int, int, int)':
blocks.cpp:19:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   19 |     int mid = l+r>>1;
      |               ~^~
blocks.cpp: In function 'long long int get(int, int, int, int, int)':
blocks.cpp:26:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   26 |     int mid = l+r>>1;
      |               ~^~
blocks.cpp: In function 'void solve(int, int, int, int, int)':
blocks.cpp:32:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   32 |     int mid = l+r>>1;
      |               ~^~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 324 KB Output is correct
6 Correct 1 ms 316 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Incorrect 1 ms 324 KB Output isn't correct
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 328 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 328 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 324 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Incorrect 1 ms 340 KB Output isn't correct
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 324 KB Output is correct
6 Correct 1 ms 316 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Incorrect 1 ms 324 KB Output isn't correct
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 324 KB Output is correct
6 Correct 1 ms 316 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Incorrect 1 ms 324 KB Output isn't correct
12 Halted 0 ms 0 KB -