PS

BOJ 11108 : TV 전쟁

lickelon 2024. 3. 19. 22:57
  • 문제 링크 : boj.kr/11108
  • 난이도 : G3
  • 태그 : 정렬, DP
 

11108번: TV 전쟁

첫 번째 줄에 주어지는 t는 테스트 케이스의 개수이다. 각 테스트 케이스의 첫 줄은 tv프로그램의 개수 n(1 ≤ n ≤ 100000)이 주어진다. 그리고 n줄에 걸쳐서 공백으로 구분된 3개의 정수 s, d, p가 주

www.acmicpc.net


코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

struct info {
    int s;
    int d;
    int p;
};

bool comp(info& a, info& b) {
    return a.s+a.d < b.s+b.d;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int T;
    cin >> T;
    while(T--) {
        vector<int> dp(10100);
        int n;
        cin >> n;
        vector<info> arr(n);
        for(auto &u : arr) {
            cin >> u.s >> u.d >> u.p;
        }
        sort(all(arr), comp);

        int idx = 0;
        for(int i = 1; i < 10100; i++) {
            dp[i] = dp[i-1];
            while(arr[idx].s+arr[idx].d == i) {
                dp[i] = max(dp[i], dp[arr[idx].s] + arr[idx].p);
                idx++;
            }
        }
        cout << dp[arr[n-1].s+arr[n-1].d] << "\n";
    }

    return 0;
}

풀이

특정 시점의 선호도를 기준으로 dp식을 세워준다.

방송이 끝나는 시점으로 dp값을 갱신해준다.

'PS' 카테고리의 다른 글

BOJ 7576 : 토마토  (0) 2024.03.21
BOJ 30961 : 최솟값, 최댓값  (0) 2024.03.20
BOJ 30878 : 약속 시간  (0) 2024.03.18
BOJ 24337 : 가희와 탑  (0) 2024.03.17
BOJ 31410 : 제독 작전  (0) 2024.03.16