๐๏ธ ๊ฒช์ ๋ฌธ์
- ๋ฌธ์ ํด๊ฒฐ ์์ด๋์ด๊ฐ ์๋ ์ฌ๋๋ค. ์์ ํ์์ผ๋ก ํ๋ฉด ์๊ฐ ์ด๊ณผ์๋ค. ์ญ์๋ DP์๋ค.
๐ ํด๊ฒฐ ๋ฐฉ๋ฒ
- DP์ต์ ๋จ์๋ฅผ ์ค๊ณํ๋ค.
- dp[n]์ n๋ฌด๊ฒ์ผ ๋ ์ต๋ ๊ฐ์น๋ผ๊ณ ํ์.
- ์ ํ์์ ์ธ์ด๋ค.
- dp[i] = max(dp[i], dp[i - weight[i]] + value[i]);
- ํฌ์ธํธ๋ ์ํ๋ฅผ ๊ฑฐ๊พธ๋ก K์์๋ถํฐ 1์ฉ ์ค์ฌ๋๊ฐ๋ฉฐ ํ๋ค๋ ๊ฒ์ด๋ค.
- 1์์ ๋ถํฐ ๋๋ฉด ์ ํ์์์ ๋ ์์ ๊ฐ์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์, ์ด๋ฏธ ๊ณ์ฐํ ๋ฌผ๊ฑด์ ๋ ๋ด์ ์ ์๋ค.
๐ ์ฝ๋
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int N, K;
cin >> N >> K;
vector<int> weight(N), value(N);
for (int i = 0; i < N; i++) {
cin >> weight[i] >> value[i];
}
vector<int> dp(K + 1, 0);
for (int i = 0; i < N; i++) {
for (int w = K; w >= weight[i]; w--) {
dp[w] = max(dp[w], dp[w - weight[i]] + value[i]);
}
}
cout << dp[K] << '\n';
return 0;
}