- 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;
}