티스토리 뷰
과제를 하루에 하나씩 할 수 있고 , 데드라인과 받을 수 있는 점수를 알려준다
이 때 점수의 최댓값을 구하는 문제!
흔히 볼 수 있는 dp문제다
우리는 과제를 하나하나 보며 선택하면 된다!
d[N(n번째 과제)][T(현재시간)]로 테이블을 잡는다
기본값은 과제를 안하고 넘어가는 값으로 잡는다
그리고 만약 현재의 과제 데드라인보다 시간이 작다면 과제를 하는것과 비교한다!
소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <iostream> #include <cstring> #include <vector> #include <algorithm> using namespace std; int n,d[1010][1010]; vector<pair<int, int>> vt; int go(int pos, int t) { if (pos == n || t > 1000) return 0; int&ret = d[pos][t]; if (ret != -1) return ret; int ptime = vt[pos].first; int pcost = vt[pos].second; ret = max(ret, go(pos + 1, t)); if (t <= ptime) ret = max(ret, go(pos + 1, t + 1) + pcost); return ret; } int main() { memset(d, -1, sizeof(d)); scanf(" %d", &n); vt.resize(n); for (int i = 0; i < n; i++) scanf(" %d %d", &vt[i].first, &vt[i].second); sort(vt.begin(), vt.end()); printf("%d\n", go(0, 1)); } | cs |
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 10750 Censoring (0) | 2018.06.28 |
---|---|
[백준] 13264 접미사 배열2 (4) | 2018.06.27 |
[백준] 15594 Out of place (0) | 2018.06.26 |
[백준] 14965 Lozinke (0) | 2018.06.25 |
[백준] 11402 이항계수4 (2) | 2018.06.25 |
댓글