알고리즘 블로그
Published 2025. 9. 28. 01:22
[APIO 2015] 발리의 조각상 PS 문제들

https://www.acmicpc.net/problem/10846

 

고평가 된 것으로 느껴지는 문제.

 

상위비트부터 최적으로 맞춰주는게 이득이라는 발상은 꽤 흔하다.

 

상위비트부터 보면서 두 가지 서로 다른 문제에 대해, 서로 다른 DP를 짜주면 된다.

나는 소신으로 플래 5에 기여했는데, 다이아 5 기여도 꽤 많아서 정말 놀랐다.

 

#include <bits/stdc++.h>
using namespace std; using ll = long long; using ii = pair<ll,ll>; using vi = vector<ll>;
#define rep(i,a,b) for (ll i = (a); i <= (b); ++i)
#define per(i,a,b) for (ll i = (b); i >= (a); --i)
#define all(x) (x).begin(), (x).end()
#define siz(x) ll((x).size())
#define Mup(x,y) (x = max(x,y))
#define mup(x,y) (x = min(x,y))
#define fi first
#define se second
#define pb push_back
#define dbg(...) fprintf(stderr,__VA_ARGS__)
#define int do not use int

const ll N = 2003;
ll n, a, b, y[N], p[N];

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    cin >> n >> a >> b;
    rep(i,1,n) cin >> y[i], p[i] = p[i-1] + y[i];
    
    if (n<=100) {
        
        ll ans = 0;
        per(k,0,45) {
            
            bool dp[103][103]{};
            dp[0][0] = true;
            
            rep(pts,1,b) {
                rep(i,1,n) {
                    rep(j,0,i-1) {
                        ll s = p[i]-p[j];
                        if (((s|ans)>>k) != (ans>>k)) continue;
                        
                        dp[i][pts] |= dp[j][pts-1];
                    }
                }
            }
            bool fail = true;
            rep(pts,a,b) if(dp[n][pts]) fail=false;
            if (fail) ans ^= 1ll<<k;
        }
        cout << ans;
        return 0;
    }
    
    ll ans = 0;
    
    per(k,0,45) {
        
        ll dp[N];
        fill(dp, dp+N, 1e9);
        dp[0] = 0;
        
        rep(i,1,n) {
            rep(j,0,i-1) {
                ll s = p[i]-p[j];
                if (((s|ans)>>k) != (ans>>k)) continue;
                
                dp[i] = min(dp[i], dp[j] + 1);
            }
        }
        if (dp[n] > b) ans ^= 1ll<<k;
    }
    cout << ans;
}

'PS 문제들' 카테고리의 다른 글

[KTSC 2019] 외계 선인장  (0) 2025.09.29
[IOI 2014] Game  (0) 2025.09.28
[IOI 2017] The Big Prize  (0) 2025.09.25
[UCPC 2022] 니은숲 예술가  (0) 2025.09.25
최근? 5월? PS  (9) 2025.05.31
profile

알고리즘 블로그

@도훈.

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...