https://www.acmicpc.net/problem/12865
๋ฌธ์
์ด ๋ฌธ์ ๋ ์์ฃผ ํ๋ฒํ ๋ฐฐ๋ญ์ ๊ดํ ๋ฌธ์ ์ด๋ค.
ํ ๋ฌ ํ๋ฉด ๊ตญ๊ฐ์ ๋ถ๋ฆ์ ๋ฐ๊ฒ ๋๋ ์ค์๋ ์ฌํ์ ๊ฐ๋ ค๊ณ ํ๋ค. ์ธ์๊ณผ์ ๋จ์ ์ ์ฌํผํ๋ฉฐ ์ต๋ํ ์ฆ๊ธฐ๊ธฐ ์ํ ์ฌํ์ด๊ธฐ ๋๋ฌธ์, ๊ฐ์ง๊ณ ๋ค๋ ๋ฐฐ๋ญ ๋ํ ์ต๋ํ ๊ฐ์น ์๊ฒ ์ธ๋ ค๊ณ ํ๋ค.
์ค์๊ฐ ์ฌํ์ ํ์ํ๋ค๊ณ ์๊ฐํ๋ N๊ฐ์ ๋ฌผ๊ฑด์ด ์๋ค. ๊ฐ ๋ฌผ๊ฑด์ ๋ฌด๊ฒ W์ ๊ฐ์น V๋ฅผ ๊ฐ์ง๋๋ฐ, ํด๋น ๋ฌผ๊ฑด์ ๋ฐฐ๋ญ์ ๋ฃ์ด์ ๊ฐ๋ฉด ์ค์๊ฐ V๋งํผ ์ฆ๊ธธ ์ ์๋ค. ์์ง ํ๊ตฐ์ ํด๋ณธ ์ ์ด ์๋ ์ค์๋ ์ต๋ K๋งํผ์ ๋ฌด๊ฒ๋ง์ ๋ฃ์ ์ ์๋ ๋ฐฐ๋ญ๋ง ๋ค๊ณ ๋ค๋ ์ ์๋ค. ์ค์๊ฐ ์ต๋ํ ์ฆ๊ฑฐ์ด ์ฌํ์ ํ๊ธฐ ์ํด ๋ฐฐ๋ญ์ ๋ฃ์ ์ ์๋ ๋ฌผ๊ฑด๋ค์ ๊ฐ์น์ ์ต๋๊ฐ์ ์๋ ค์ฃผ์.
์ ๋ ฅ
์ฒซ ์ค์ ๋ฌผํ์ ์ N(1 ≤ N ≤ 100)๊ณผ ์ค์๊ฐ ๋ฒํธ ์ ์๋ ๋ฌด๊ฒ K(1 ≤ K ≤ 100,000)๊ฐ ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑฐ์ณ ๊ฐ ๋ฌผ๊ฑด์ ๋ฌด๊ฒ W(1 ≤ W ≤ 100,000)์ ํด๋น ๋ฌผ๊ฑด์ ๊ฐ์น V(0 ≤ V ≤ 1,000)๊ฐ ์ฃผ์ด์ง๋ค.
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๋ชจ๋ ์๋ ์ ์์ด๋ค.
์ถ๋ ฅ
ํ ์ค์ ๋ฐฐ๋ญ์ ๋ฃ์ ์ ์๋ ๋ฌผ๊ฑด๋ค์ ๊ฐ์นํฉ์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
๊ณจ๋5.
์ข ์ด๋ ค์ด dp๋ฌธ์ ๋ค ์ถ์ผ๋ฉด ํญ์ ์ด์ฐจ์๋ฐฐ์ด ํ๋ก ์๊ฐํด์ผํ๋๋ฏ
๋ฐฐ๋ญ ๋ฌธ์ ๋ ์ ๋ช ํ DP๋ผ๊ณ ํ๋ค!
๋๋ง ๋ชฐ๋์ง ๋
์ด๋ฒ์๋ ํ ์ธ๋ฑ์ค = ๋ฌผ๊ฑด ๋ฒํธ, ์ด ์ธ๋ฑ์ค = ๋ฐฐ๋ญ์ ๋ฌด๊ฒ(๋์ ๋ฌด๊ฒ), dp๋ด์ฉ = ๋์ ๊ฐ์น
์ด๋ ๊ฒ ๋๊ณ ํ๋ฅผ ๊ทธ๋ ค๋ณด์๋ค.
์์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ํ ์ผ๋ ์๋์ ๊ฐ๋ค
4 7
6 13
4 8
3 6
5 12
์ด๊ฒ์ ํ๋ก ๊ทธ๋ ค๋ณด๋ฉด,
๋ฌผ๊ฑด \ ๋์ ๋ฌด๊ฒ | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
1 (๋ฌด๊ฒ6, ๊ฐ์น 13) | 0 | 0 | 0 | 0 | 0 | 13 | 13 |
2 (๋ฌด๊ฒ4, ๊ฐ์น8) | 0 | 0 | 0 | 8 | 8 | 13 | 13 |
3 (๋ฌด๊ฒ3, ๊ฐ์น6) | 0 | 0 | 6 | 8 | 8 | 13 | 14 (8+6) |
4 (๋ฌด๊ฒ5, ๊ฐ์น12) | 0 | 0 | 6 | 8 | 12 | 13 | 14 |
์ฒ์์ ์ดํดํ๊ธฐ ์ด๋ ค์ ๋๋ฐ, ์ฐจ๋ถํ ํ๋์ฉ ์๊ฐํด๋ณด๋ ํ๋ ธ๋ค
ํด๋นํ๋ ๋ฌผ๊ฑด ๋ฒํธ์์ ํด๋นํ๋ ๋์ ๋ฌด๊ฒ๊น์ง์ ์ต๋ ๊ฐ์น๋ฅผ ๊ณ์ฐํ์ฌ ์ฑ์ฐ๋ฉด ๋๋ค.
๋ค๋ฅธ ํ ์คํธ์ผ์ด์ค๋ฅผ ๋๋ ค๋ณด์
5 10
9 5
5 10
9 5
4 8
8 9
7 8
5 3
์ testcase๋ฅผ ๋ฃ์ผ๋ฉด ํ๋ ์๋์ ๊ฐ์ด ๋์ค๊ณ , ๋ต์ 11์ด๋ค.
๋์ ํ์ด
#include <iostream>
#include <string>
using namespace std;
int dp[101][100001];
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int n;
int k;
int wv[101][2] = {0};
cin >> n >> k;
for (int i = 1; i <= n; ++i){
cin >> wv[i][0] >> wv[i][1]; // 0:๋ฌด๊ฒ, 1:๊ฐ์น
}
// dp ํ: ๋ฌผ๊ฑด ๋ฒํธ & ์ด : ๋์ ๋ฌด๊ฒ & ๊ฐ : ๋์ ๊ฐ์น
for (int i = 1; i <= n; ++i){
for (int j = 1; j <= k; ++j){
if(j >= wv[i][0]){ // ๋์ ๋ฌด๊ฒ๊ฐ ๊ทธ ๋ฌผ๊ฑด ๋ฌด๊ฒ ์ด์์ผ๋
dp[i][j] = max(dp[i-1][j], dp[i-1][j-wv[i][0]] + wv[i][1]);
// ํ์ฌ๋ฌผ๊ฑด์ ๋ฃ๊ธฐ ์ ๋ฌด๊ฒ์ max๊ฐ์น์, (ํ์ฌ๋ฌด๊ฒ๋งํผ ๋บ์๋์ ์ ๋ฌด๊ฒ+ํ์ฌ๋ฌผ๊ฑด ๋ฌด๊ฒ)์ ๊ฐ์น๋ฅผ ๋น๊ต
} else{
dp[i][j] = dp[i - 1][j];
}
// cout << dp[i][j] << " ";
}
// cout << "\n";
}
cout << dp[n][k];
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/BOJ] 2467 : ์ฉ์ก (ํฌํฌ์ธํฐ) (0) | 2023.03.22 |
---|---|
[C++/BOJ] 10942 : ํฐ๋ฆฐ๋๋กฌ? (DP) (0) | 2023.03.18 |
[C++/BOJ] 1890 : ์ ํ (DP) (1) | 2023.03.16 |
[C++/BOJ] 9251 : LCS (DP) (0) | 2023.03.16 |
[C++/BOJ] 9465 : ์คํฐ์ปค (DP) (0) | 2023.03.15 |