๐ฆ7579: ์ฑ
[์๊ณ ๋ฆฌ์ฆ ํ์ด] ๊ฐ๋๊ท
Reviewed by Kade Kang (devkade12@gmail.com)
Reviewed:: 2024-02-18
๋ฌธ์ ํ์ธํ๊ธฐ
ํ์ด
- DP๋ฅผ ๋ง์ด ํ์ด๋ณด์ง ์์์ ๊ทธ๋ฐ๊ฐ ์์ง๋ DP ๊ฐ๋ ์ด ์ข ์ด๋ ต๋ค.
- dp[i][j] ๋ i ๋ฒ์งธ ์ฑ์ด j ๋น์ฉ์ ์ฌ์ฉํด์ ํ๋ณดํ ์ ์๋ ์ต๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ปํ๋ค.
- dp[i-1][j-cost[i]]+bytes[i] ์ ํตํด ์ด์ ์ฑ์์ j-cost[i] ๋น์ฉ์ผ๋ก ํ๋ณดํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ + ํ์ฌ ์ฑ์์ ํ๋ณดํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐฑ์ ํด์ค๋ค.
#include <iostream>
#include <algorithm>
#define endl '\n'
using namespace std;
int bytes[101], cost[101];
int dp[101][10001];
int N, M, sum = 0, res = INT32_MAX;
void Input(){
cin >> N >> M;
for(int i=1; i<=N; i++) {
cin >> bytes[i];
}
for(int i=1; i<=N; i++) {
cin >> cost[i];
sum += cost[i];
}
}
void Solution(){
for(int i=1; i<=N; i++){
for(int j=0; j<=sum; j++){
if(j >= cost[i]){
dp[i][j] = max(dp[i][j], dp[i-1][j-cost[i]]+bytes[i]);
}
dp[i][j] = max(dp[i][j], dp[i-1][j]);
if(dp[i][j] >= M) {
res = min(res, j);
}
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
Input();
Solution();
cout << res << endl;
return 0;
}