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)๊ฐ ์ฃผ์ด์ง๋ค.
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๋ชจ๋ ์๋ ์ ์์ด๋ค.
์ถ๋ ฅ
ํ ์ค์ ๋ฐฐ๋ญ์ ๋ฃ์ ์ ์๋ ๋ฌผ๊ฑด๋ค์ ๊ฐ์นํฉ์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
ํ์ด1 - 2์ฐจ์ dp
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
struct info {
int w, v;
};
int knapback(int n, int k, vector<info> &product) {
vector<vector<int>> dp(n+1, vector<int>(k+1, 0));
for(int i=1; i<=n; i++) {
for(int j=0; j<product[i].w; j++) {
dp[i][j] = dp[i-1][j];
}
for(int j=product[i].w; j<=k; j++) {
dp[i][j] = max(dp[i-1][j-product[i].w] + product[i].v, dp[i-1][j]);
}
}
return dp[n][k];
}
int main() {
int n, k;
cin >> n >> k;
vector<info> product(n+1,{0,0});
for(int i=1; i<=n; i++)
cin >> product[i].w >> product[i].v;
cout << knapback(n, k, product);
return 0;
}
/*
*/
ํ์ด2 - 1์ฐจ์ dp
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
struct info {
int w, v;
};
int knapback(int n, int k, vector<info> &product) {
vector<int> dp(k+1, 0);
for(int i=1; i<=n; i++)
for(int j=k; j>=product[i].w; j--)
dp[j] = max(dp[j-product[i].w] + product[i].v, dp[j]);
return dp[k];
}
int main() {
int n, k;
cin >> n >> k;
vector<info> product(n+1,{0,0});
for(int i=1; i<=n; i++)
cin >> product[i].w >> product[i].v;
cout << knapback(n, k, product);
return 0;
}
/*
*/
'๐๏ธ ICPC Sinchon > Dynamic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 2748๋ฒ: ํผ๋ณด๋์น ์ 2 (0) | 2023.01.30 |
---|---|
[BOJ S1][C++] ๋ฐฑ์ค 2156๋ฒ: ํฌ๋์ฃผ ์์ (0) | 2022.09.30 |
[BOJ S2][C++] ๋ฐฑ์ค 11053๋ฒ: ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (0) | 2022.09.28 |
[BOJ S2][C++] ๋ฐฑ์ค 11048๋ฒ: ์ด๋ํ๊ธฐ (0) | 2022.09.27 |
[BOJ][C++] ๋ฐฑ์ค 2579๋ฒ: ๊ณ๋จ ์ค๋ฅด๊ธฐ (0) | 2022.09.27 |