https://www.acmicpc.net/problem/12865
12865๋ฒ: ํ๋ฒํ ๋ฐฐ๋ญ
์ฒซ ์ค์ ๋ฌผํ์ ์ N(1 ≤ N ≤ 100)๊ณผ ์ค์๊ฐ ๋ฒํธ ์ ์๋ ๋ฌด๊ฒ K(1 ≤ K ≤ 100,000)๊ฐ ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑฐ์ณ ๊ฐ ๋ฌผ๊ฑด์ ๋ฌด๊ฒ W(1 ≤ W ≤ 100,000)์ ํด๋น ๋ฌผ๊ฑด์ ๊ฐ์น V(0 ≤ V ≤ 1,000)
www.acmicpc.net
๋ฌธ์
์ด ๋ฌธ์ ๋ ์์ฃผ ํ๋ฒํ ๋ฐฐ๋ญ์ ๊ดํ ๋ฌธ์ ์ด๋ค.
ํ ๋ฌ ํ๋ฉด ๊ตญ๊ฐ์ ๋ถ๋ฆ์ ๋ฐ๊ฒ ๋๋ ์ค์๋ ์ฌํ์ ๊ฐ๋ ค๊ณ ํ๋ค. ์ธ์๊ณผ์ ๋จ์ ์ ์ฌํผํ๋ฉฐ ์ต๋ํ ์ฆ๊ธฐ๊ธฐ ์ํ ์ฌํ์ด๊ธฐ ๋๋ฌธ์, ๊ฐ์ง๊ณ ๋ค๋ ๋ฐฐ๋ญ ๋ํ ์ต๋ํ ๊ฐ์น ์๊ฒ ์ธ๋ ค๊ณ ํ๋ค.
์ค์๊ฐ ์ฌํ์ ํ์ํ๋ค๊ณ ์๊ฐํ๋ 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;
}
/*
*/
25.04.30
// ํ์ด : https://whkakrkr.tistory.com
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> ci;
int main() {
ios_base::sync_with_stdio(false);
cout.tie(NULL);
cin.tie(NULL);
// input
int n, k;
cin >> n >> k;
vector<ci>wv(n);
for(int i=0; i<n; i++) {
int w,v;
cin >> w >>v;
wv[i] = {w,v};
}
// solution
sort(wv.begin(), wv.end());
vector<int>dp(k+1, 0);
for(int i=0; i<n; i++) {
int w = wv[i].first;
int v = wv[i].second;
for(int j=k; j>=w; j--) {
dp[j] = max(dp[j-w] + v, dp[j]);
}
}
// output
int ans = *max_element(dp.begin(), dp.end());
cout << ans;
return 0;
}
'๐๏ธ PS (BOJ) > Dynamic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 2421๋ฒ: ์ ๊ธํต (0) | 2024.09.24 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 2313๋ฒ: ๋ณด์ ๊ตฌ๋งคํ๊ธฐ (0) | 2024.09.23 |
[BOJ][C++] ๋ฐฑ์ค 1577๋ฒ: ๋๋ก์ ๊ฐ์ (0) | 2024.09.16 |
[BOJ][C++] ๋ฐฑ์ค 4883๋ฒ: ์ผ๊ฐ ๊ทธ๋ํ (0) | 2024.09.13 |
[BOJ][C++] ๋ฐฑ์ค 2688๋ฒ: ์ค์ด๋ค์ง ์์ (0) | 2024.09.06 |