- 문제 링크 : 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값을 갱신해준다.
728x90
'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 |