#include<stdio.h> #include<vector> using namespace std; const int MAX_N = 500; typedef long long ll; int t, n, k, a[MAX_N]; vector<int> r; bool f(ll x) { vector<int> t; ll c = 1, s = 0; for (int i = n - 1; i >= 0; i--) { if (a[i]>x) return false; if (s + a[i]>x || i + 1 == k - c) s = a[i], c++, t.push_back(i); else s += a[i]; } if (c == k) { r = t; return true; } return false; } int main() { scanf("%d", &t); while (t--) { scanf("%d %d", &n, &k); int i; for (i = 0; i<n; i++) scanf("%d", a + i); ll h = 0, t = 5e9, m; while (h <= t) { m = (h + t) / 2; if (f(m)) t = m - 1; else h = m + 1; } i = 0; for (int j = r.size() - 1; j >= 0; j--) { for (; i <= r[j]; i++) printf("%d ", a[i]); printf("/ "); } for (; i<n; i++) printf("%d ", a[i]); puts(""); } return 0; }
3487번: Copying Books
https://www.acmicpc.net/problem/3487
라벨:
다시풀예정
                                              ,
                                            
BOJ
                                              ,
                                            
greedy algorithm
                                              ,
                                            
parametric search
피드 구독하기:
댓글
                                      (
                                      Atom
                                      )
                                    
댓글 없음 :
댓글 쓰기