- toc {:toc}
ํ์ด
| 1 ์ผ | 2 ์ผ | 3 ์ผ | 4 ์ผ | 5 ์ผ | 6 ์ผ | 7 ์ผ | |
|---|---|---|---|---|---|---|---|
| Ti | 3 | 5 | 1 | 1 | 2 | 4 | 2 |
| Pi | 10 | 20 | 10 | 20 | 15 | 40 | 200 |
ํด๋น ์์๋ฅผ ํตํด์ ํ์ธํด๋ณด๋ฉด ๊ฒฐ๊ตญ ๊ณ์ํด์ ๋์ ์ผ๋ก ์ต๋์ ์์ต์ ๋ด๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.
์ด๋ค ๋ ๋ถํฐ ์์ํ ์ง๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ ์ฒด์ ์ผ๋ก ํ์ธํด์ค์ผ ํ๋ค. ํด๋น ์์์์ ์ต๋๋ 1 ์ผ, 4 ์ผ, 5 ์ผ์ ๊ฒฝ์ฐ 45 ๋ก ์ต๋๊ฐ ๋๋ค.
์ต๋๊ฐ์ ๊ณ์ํด์ ๊ฐฑ์ ์ ํ๊ธฐ ์ํด์ ํด๋น ์์ ์ ์ต๋๊ฐ์ res ๋ก dp ์ ๊ฐฑ์ ํด์ค๋ค. ์๋ด์ ์งํํ ๋ ์์ต์ ๋ฐ๋ ์์ ์ ์๋ด์ T ์ผ ๋์ ์งํํ ํ ์ป์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ ์์ ์ dp ์ ์ ์ฅํด์ฃผ๊ณ , ์ต๋๊ฐ์ ๊ฐฑ์ ํ๋ ๋ฐฉ์์ผ๋ก dp ๋ฅผ ๊ฐฑ์ ํด๋๊ฐ๋ค.
- 1 ์ผ ์๋ด ์งํ
| 1 ์ผ | 2 ์ผ | 3 ์ผ | 4 ์ผ | 5 ์ผ | 6 ์ผ | 7 ์ผ | |
|---|---|---|---|---|---|---|---|
| dp | 0 | 0 | 0 | 10 | 0 | 0 | 0 |
res = 0
- 2 ์ผ ์๋ด ์งํ
| 1 ์ผ | 2 ์ผ | 3 ์ผ | 4 ์ผ | 5 ์ผ | 6 ์ผ | 7 ์ผ | |
|---|---|---|---|---|---|---|---|
| dp | 0 | 0 | 0 | 10 | 0 | 0 | 20 |
res = 0
- 3 ์ผ ์๋ด ์งํ
| 1 ์ผ | 2 ์ผ | 3 ์ผ | 4 ์ผ | 5 ์ผ | 6 ์ผ | 7 ์ผ | |
|---|---|---|---|---|---|---|---|
| dp | 0 | 0 | 0 | 10 | 0 | 0 | 20 |
res = 0
3 ์ผ ์๋ด์ ๊ฒฝ์ฐ 3 ์ผ ํ๋ฃจ ์๋ด์ ์งํํ๊ณ 4 ์ผ์ ์์ต์ ์ป๋๋ค. ์ด ๋ ์ป์ ์์ต์ด ์ด์ ์ ์ป์ ์ ์์๋ ์์ต๋ณด๋ค ๋์์ง ๋ฎ์์ง๋ฅผ ํ์ธํ๊ณ , ๋์ผ๋ฉด ๊ฐฑ์ , ๋ฎ์ผ๋ฉด ํต๊ณผํ๋ค.
- 4 ์ผ ์๋ด ์งํ
| 1 ์ผ | 2 ์ผ | 3 ์ผ | 4 ์ผ | 5 ์ผ | 6 ์ผ | 7 ์ผ | |
|---|---|---|---|---|---|---|---|
| dp | 0 | 0 | 0 | 10 | 30 | 0 | 20 |
res = 10
4 ์ผ ์๋ด์ ์งํํ๋ฉด 4 ์ผ ํ๋ฃจ ์๋ด์ ์งํํ๊ณ 5 ์ผ์ ์์ต +20 ์ด ๋๋ค. ์ด ๋, ์ด์ ์ ์ป์๋ ์์ต์ ์ถ๊ฐํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ dp[5] ์์ dp[4] ์ ๊ฐ๊ณผ 4 ์ผ ์๋ด์ ์งํํ๊ณ ๋ ๋ค์ ์์ต 20 ์ ๋ํด 30 ์ ์ ์ฅํ๋ค.
- 5 ์ผ ์๋ด ์งํ
| 1 ์ผ | 2 ์ผ | 3 ์ผ | 4 ์ผ | 5 ์ผ | 6 ์ผ | 7 ์ผ | |
|---|---|---|---|---|---|---|---|
| dp | 0 | 0 | 0 | 10 | 30 | 0 | 45 |
res = 30
5 ์ผ ์๋ด์ ์งํํ๋ฉด ์ดํ์ ์งํํด์ผ ํ๊ธฐ ๋๋ฌธ์ dp[7] ์ ์์ต์ด ์ ์ฅ๋๋ค. +15 ๋ฅผ ํตํด 45 ๋ฅผ ์ ์ฅํ๋ค. ์ด ๋๋ ์ด์ ์ ์ป์ ์ ์์๋ ์์ต๋ณด๋ค ๋์์ง ๋ฎ์์ง๋ฅผ ํ์ธํ๊ณ ๋์ผ๋ฉด ๊ฐฑ์ , ๋ฎ์ผ๋ฉด ํต๊ณผ์ํจ๋ค.
- 6 ์ผ ์๋ด ์งํ
| 1 ์ผ | 2 ์ผ | 3 ์ผ | 4 ์ผ | 5 ์ผ | 6 ์ผ | 7 ์ผ | |
|---|---|---|---|---|---|---|---|
| dp | 0 | 0 | 0 | 10 | 30 | 30 | 45 |
res = 30
6 ์ผ์ ๊ฒฝ์ฐ 8 ์ผ์ ํด์ฌ๋ฅผ ํด์ผํ๋๋ฐ 4 ์ผ ๋์ ์๋ดํ ์ ์๊ธฐ ๋๋ฌธ์ ํต๊ณผ์ํจ๋ค. n+1 ์ผ๋ณด๋ค ํฐ ๊ฒฝ์ฐ ํต๊ณผ์ํค๋ ์กฐ๊ฑด์ ์ถ๊ฐํด์ผ ํ๋ค. ์์ต์ ์ป์ ์ ์๋ ์ฌ๋ฌ ๊ฐ์ง ๊ฒฝ์ฐ์ ์ ์ค ์ต๋ ์์ต์ ์ป๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ํํ๊ธฐ ์ํด์ ์ต๋๊ฐ์ dp ์ ๊ณ์ ๊ฐฑ์ ์ ํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ dp[6] ์๋ ์ต๋๊ฐ์ธ res=30 ์ ์ ์ฅํ๋ค.
- 7 ์ผ ์๋ด ์งํ
7 ์ผ์ ๊ฒฝ์ฐ์๋ ์๋ด์ ํ ์ ์๊ธฐ ๋๋ฌธ์ dp ๊ฐ์ ๋ณํ์ง ์๋๋ค.
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
int T[1500005], P[1500005], res=0;
int dp[1500005];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
for(int i=1; i<=n; i++){
cin >> T[i] >> P[i];
}
for(int i=1; i<=n+1; i++){
dp[i] = max(dp[i], res);
if(i+T[i] < n+1 && dp[i]+P[i] > dp[i+T[i]]){
dp[i+T[i]] = dp[i] + P[i];
}
res = max(dp[i], res);
}
cout << res << endl;
return 0;
}