• toc {:toc}

๋ฌธ์ œ ํ™•์ธํ•˜๊ธฐ

ํ’€์ด

1์ผ2์ผ3์ผ4์ผ5์ผ6์ผ7์ผ
Ti3511242
Pi102010201540200

ํ•ด๋‹น ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด์„œ ํ™•์ธํ•ด๋ณด๋ฉด ๊ฒฐ๊ตญ ๊ณ„์†ํ•ด์„œ ๋ˆ„์ ์œผ๋กœ ์ตœ๋Œ€์˜ ์ˆ˜์ต์„ ๋‚ด๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
์–ด๋–ค ๋‚ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ์ง€๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด์ ์œผ๋กœ ํ™•์ธํ•ด์ค˜์•ผ ํ•œ๋‹ค. ํ•ด๋‹น ์˜ˆ์‹œ์—์„œ ์ตœ๋Œ€๋Š” 1์ผ, 4์ผ, 5์ผ์˜ ๊ฒฝ์šฐ 45๋กœ ์ตœ๋Œ€๊ฐ€ ๋œ๋‹ค.

์ตœ๋Œ“๊ฐ’์„ ๊ณ„์†ํ•ด์„œ ๊ฐฑ์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•ด๋‹น ์‹œ์ ์˜ ์ตœ๋Œ“๊ฐ’์„ res๋กœ dp์— ๊ฐฑ์‹ ํ•ด์ค€๋‹ค. ์ƒ๋‹ด์„ ์ง„ํ–‰ํ•  ๋•Œ ์ˆ˜์ต์„ ๋ฐ›๋Š” ์‹œ์ ์€ ์ƒ๋‹ด์„ T์ผ ๋™์•ˆ ์ง„ํ–‰ํ•œ ํ›„ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋๋‚œ ์‹œ์ ์˜ dp์— ์ €์žฅํ•ด์ฃผ๊ณ , ์ตœ๋Œ“๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ dp๋ฅผ ๊ฐฑ์‹ ํ•ด๋‚˜๊ฐ„๋‹ค.

  • 1์ผ ์ƒ๋‹ด ์ง„ํ–‰
1์ผ2์ผ3์ผ4์ผ5์ผ6์ผ7์ผ
dp00010000

res = 0

  • 2์ผ ์ƒ๋‹ด ์ง„ํ–‰
1์ผ2์ผ3์ผ4์ผ5์ผ6์ผ7์ผ
dp000100020

res = 0

  • 3์ผ ์ƒ๋‹ด ์ง„ํ–‰
1์ผ2์ผ3์ผ4์ผ5์ผ6์ผ7์ผ
dp000100020

res = 0

3์ผ ์ƒ๋‹ด์˜ ๊ฒฝ์šฐ 3์ผ ํ•˜๋ฃจ ์ƒ๋‹ด์„ ์ง„ํ–‰ํ•˜๊ณ  4์ผ์— ์ˆ˜์ต์„ ์–ป๋Š”๋‹ค. ์ด ๋•Œ ์–ป์€ ์ˆ˜์ต์ด ์ด์ „์— ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋˜ ์ˆ˜์ต๋ณด๋‹ค ๋†’์€์ง€ ๋‚ฎ์€์ง€๋ฅผ ํ™•์ธํ•˜๊ณ , ๋†’์œผ๋ฉด ๊ฐฑ์‹ , ๋‚ฎ์œผ๋ฉด ํ†ต๊ณผํ•œ๋‹ค.

  • 4์ผ ์ƒ๋‹ด ์ง„ํ–‰
1์ผ2์ผ3์ผ4์ผ5์ผ6์ผ7์ผ
dp0001030020

res = 10

4์ผ ์ƒ๋‹ด์„ ์ง„ํ–‰ํ•˜๋ฉด 4์ผ ํ•˜๋ฃจ ์ƒ๋‹ด์„ ์ง„ํ–‰ํ•˜๊ณ  5์ผ์— ์ˆ˜์ต +20์ด ๋œ๋‹ค. ์ด ๋•Œ, ์ด์ „์— ์–ป์—ˆ๋˜ ์ˆ˜์ต์„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— dp[5]์—์„œ dp[4]์˜ ๊ฐ’๊ณผ 4์ผ ์ƒ๋‹ด์„ ์ง„ํ–‰ํ•˜๊ณ  ๋‚œ ๋’ค์˜ ์ˆ˜์ต 20์„ ๋”ํ•ด 30์„ ์ €์žฅํ•œ๋‹ค.

  • 5์ผ ์ƒ๋‹ด ์ง„ํ–‰
1์ผ2์ผ3์ผ4์ผ5์ผ6์ผ7์ผ
dp0001030045

res = 30

5์ผ ์ƒ๋‹ด์„ ์ง„ํ–‰ํ•˜๋ฉด ์ดํ‹€์„ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— dp[7]์— ์ˆ˜์ต์ด ์ €์žฅ๋œ๋‹ค. +15๋ฅผ ํ†ตํ•ด 45๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ด ๋•Œ๋„ ์ด์ „์— ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋˜ ์ˆ˜์ต๋ณด๋‹ค ๋†’์€์ง€ ๋‚ฎ์€์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ๋†’์œผ๋ฉด ๊ฐฑ์‹ , ๋‚ฎ์œผ๋ฉด ํ†ต๊ณผ์‹œํ‚จ๋‹ค.

  • 6์ผ ์ƒ๋‹ด ์ง„ํ–‰
1์ผ2์ผ3์ผ4์ผ5์ผ6์ผ7์ผ
dp00010303045

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