๐Ÿ•๏ธ ICPC Sinchon/Backtracking

[BOJ][C++] ๋ฐฑ์ค€ 14501๋ฒˆ: ํ‡ด์‚ฌ

์„ ๋‹ฌ 2024. 11. 15. 05:35
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/14501

 

๋ฌธ์ œ

์ƒ๋‹ด์›์œผ๋กœ ์ผํ•˜๊ณ  ์žˆ๋Š” ๋ฐฑ์ค€์ด๋Š” ํ‡ด์‚ฌ๋ฅผ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์˜ค๋Š˜๋ถ€ํ„ฐ N+1์ผ์งธ ๋˜๋Š” ๋‚  ํ‡ด์‚ฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ, ๋‚จ์€ N์ผ ๋™์•ˆ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์ƒ๋‹ด์„ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

๋ฐฑ์ค€์ด๋Š” ๋น„์„œ์—๊ฒŒ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์ƒ๋‹ด์„ ์žก์œผ๋ผ๊ณ  ๋ถ€ํƒ์„ ํ–ˆ๊ณ , ๋น„์„œ๋Š” ํ•˜๋ฃจ์— ํ•˜๋‚˜์”ฉ ์„œ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ƒ๋‹ด์„ ์žก์•„๋†“์•˜๋‹ค.

๊ฐ๊ฐ์˜ ์ƒ๋‹ด์€ ์ƒ๋‹ด์„ ์™„๋ฃŒํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ๊ธฐ๊ฐ„ Ti์™€ ์ƒ๋‹ด์„ ํ–ˆ์„ ๋•Œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธˆ์•ก Pi๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

N = 7์ธ ๊ฒฝ์šฐ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒ๋‹ด ์ผ์ •ํ‘œ๋ฅผ ๋ณด์ž.

 1์ผ2์ผ3์ผ4์ผ5์ผ6์ผ7์ผTiPi
3 5 1 1 2 4 2
10 20 10 20 15 40 200

1์ผ์— ์žกํ˜€์žˆ๋Š” ์ƒ๋‹ด์€ ์ด 3์ผ์ด ๊ฑธ๋ฆฌ๋ฉฐ, ์ƒ๋‹ดํ–ˆ์„ ๋•Œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธˆ์•ก์€ 10์ด๋‹ค. 5์ผ์— ์žกํ˜€์žˆ๋Š” ์ƒ๋‹ด์€ ์ด 2์ผ์ด ๊ฑธ๋ฆฌ๋ฉฐ, ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธˆ์•ก์€ 15์ด๋‹ค.

์ƒ๋‹ด์„ ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ธฐ๊ฐ„์€ 1์ผ๋ณด๋‹ค ํด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋“  ์ƒ๋‹ด์„ ํ•  ์ˆ˜๋Š” ์—†๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ 1์ผ์— ์ƒ๋‹ด์„ ํ•˜๊ฒŒ ๋˜๋ฉด, 2์ผ, 3์ผ์— ์žˆ๋Š” ์ƒ๋‹ด์€ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. 2์ผ์— ์žˆ๋Š” ์ƒ๋‹ด์„ ํ•˜๊ฒŒ ๋˜๋ฉด, 3, 4, 5, 6์ผ์— ์žกํ˜€์žˆ๋Š” ์ƒ๋‹ด์€ ํ•  ์ˆ˜ ์—†๋‹ค.

๋˜ํ•œ, N+1์ผ์งธ์—๋Š” ํšŒ์‚ฌ์— ์—†๊ธฐ ๋•Œ๋ฌธ์—, 6, 7์ผ์— ์žˆ๋Š” ์ƒ๋‹ด์„ ํ•  ์ˆ˜ ์—†๋‹ค.

ํ‡ด์‚ฌ ์ „์— ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ๋‹ด์˜ ์ตœ๋Œ€ ์ด์ต์€ 1์ผ, 4์ผ, 5์ผ์— ์žˆ๋Š” ์ƒ๋‹ด์„ ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ์ด๋•Œ์˜ ์ด์ต์€ 10+20+15=45์ด๋‹ค.

์ƒ๋‹ด์„ ์ ์ ˆํžˆ ํ–ˆ์„ ๋•Œ, ๋ฐฑ์ค€์ด๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ˆ˜์ต์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N (1 ≤ N ≤ 15)์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— Ti์™€ Pi๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด์„œ ์ฃผ์–ด์ง€๋ฉฐ, 1์ผ๋ถ€ํ„ฐ N์ผ๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Ti ≤ 5, 1 ≤ Pi ≤ 1,000)

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฐฑ์ค€์ด๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ด์ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

ํ’€์ด

๋ฐฑํŠธ๋ž˜ํ‚น(์žฌ๊ท€ํ•จ์ˆ˜) ๋ฌธ์ œ

๊ฐ ๋‚ ์งœ๋งˆ๋‹ค ์ƒ๋‹ด ํ•˜๋Š” ๊ฒฝ์šฐ์™€ ์•ˆํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ „๋ถ€ ๊ณ„์‚ฐํ•ด์ฃผ๋ฉด ๋

// ํ’€์ด : https://whkakrkr.tistory.com

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int n;
vector<int> ans;

void recur(vector<int>&t, vector<int>&p, int day, int money) {
    if(day>=n) {
        ans.push_back(money);
        return;
    }
    
    int next = day+t[day];
    if(next<=n) {
        recur(t, p, next, money+p[day]); // ์ƒ๋‹ด ํ•œ๋‹ค
    }
    recur(t, p, day+1, money); // ์ƒ๋‹ด ์•ˆํ•œ๋‹ค
}

int main() {
    cin >> n;
    vector<int>t(n);
    vector<int>p(n);
    for(int i=0; i<n; i++) {
        cin >> t[i] >> p[i];
    }
    
    recur(t, p, 0, 0);
    
    cout << *max_element(ans.begin(), ans.end());
    
    return 0;
}
๋ฐ˜์‘ํ˜•