๐ป
[๋ฐฑ์ค] ๊ทธ๋ฆฌ๋์๊ณ ๋ฆฌ์ฆ - 12866. ํ๋ฒํ ๋ฐฐ๋ญ ๋ณธ๋ฌธ
[๋ฐฑ์ค] ๊ทธ๋ฆฌ๋์๊ณ ๋ฆฌ์ฆ - 12866. ํ๋ฒํ ๋ฐฐ๋ญ
๋ํจ๋ 2020. 2. 27. 21:51๋ฌธ์
์ด ๋ฌธ์ ๋ ์์ฃผ ํ๋ฒํ ๋ฐฐ๋ญ์ ๊ดํ ๋ฌธ์ ์ด๋ค.
ํ ๋ฌ ํ๋ฉด ๊ตญ๊ฐ์ ๋ถ๋ฆ์ ๋ฐ๊ฒ ๋๋ ์ค์๋ ์ฌํ์ ๊ฐ๋ ค๊ณ ํ๋ค. ์ธ์๊ณผ์ ๋จ์ ์ ์ฌํผํ๋ฉฐ ์ต๋ํ ์ฆ๊ธฐ๊ธฐ ์ํ ์ฌํ์ด๊ธฐ ๋๋ฌธ์, ๊ฐ์ง๊ณ ๋ค๋ ๋ฐฐ๋ญ ๋ํ ์ต๋ํ ๊ฐ์น ์๊ฒ ์ธ๋ ค๊ณ ํ๋ค.
์ค์๊ฐ ์ฌํ์ ํ์ํ๋ค๊ณ ์๊ฐํ๋ 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
4 7
6 13
4 8
3 6
5 12
์์ ์ถ๋ ฅ1
14
์๊ฐ
์ผ๋ฐ์ ์ธ ๋ฐฐ๋ญ๋ฌธ์ ์๋ค. ์ค๋๋ง์ ํ์ด์ ๊ธฐ์ต์ด ์๋์ knapsack ์๊ณ ๋ฆฌ์ฆ ์ฐธ๊ณ ํ๋ค.
์์ฑํ ์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
int ans[100][100001];
vector<pair<int,int> > profit;
int n, w, v, k;
int main(int argc, const char * argv[]) {
// insert code here...
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> k; // n:๋ฌผํ์ ์, k:๋ฒํธ ์ ์๋ ๋ฌด๊ฒ
for(int i=0; i<n; i++){
cin >> w >> v;
profit.push_back(make_pair(w,v));
}
for(int i=0; i<n; i++){
for(int j=0; j<=k; j++){
// ์ฒ์์ด๊ณ , ๋ฌด๊ฒ๊ฐ ๋ฃ์ ์ ์์ผ๋ฉด ๋ฃ๋๋ค.
if(i==0){
if(profit[i].first <= j){
ans[i][j] = profit[i].second;
}
continue;
}
//๋ฃ์ผ๋ ค๋ ๋ฌผ๊ฑด์ด ๋ฌด๊ฒ์กฐ๊ฑด์ ์ถฉ์กฑํ์ ๋๋ ์ด์ ๋ฌผ๊ฑด์ ๊ฐ์น์ ์ด์ ๋ฌผ๊ฑด์ ํ์ฌ ๋ฌผ๊ฑด์ ๋ฃ์์๋์ ๊ฐ์น ์ค์ ํฐ ๊ฐ์ ๊ฐ์ง๋ค.
if(profit[i].first <= j){
ans[i][j] = max(ans[i-1][j], ans[i-1][j-profit[i].first] + profit[i].second);
}else{ // ๋ฌด๊ฒ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ๋ชปํ๋ฉด ์ด์ ๋ฌผ๊ฑด์ ๊ฐ์น๋ก ํ๋ค.
ans[i][j] = ans[i-1][j];
}
}
}
cout << ans[n-1][k] << "\n";
}
+ ๋ค๋ฅธ ํ์ด)
#include <iostream>
#include <algorithm>
using namespace std;
int d[101][100001];
int w[101],v[101];
int main() {
int n,k,i,j;
cin >> n >> k;
for(int i=1; i<=n; i++)
cin>>w[i]>>v[i];
for(i=1; i<=n; i++){
for(j=1; j<=k; j++){
if(w[i]>j){
d[i][j] = d[i-1][j];
}else{
d[i][j]=max(d[i-1][j],d[i-1][j-w[i]]+v[i]);
}
}
}
cout << d[n][k];
return 0;
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ํ์ด Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] DFS์BFS - 10026. ์ ๋ก์์ฝ (0) | 2020.02.28 |
---|---|
[๋ฐฑ์ค] ๊ทธ๋ฆฌ๋์๊ณ ๋ฆฌ์ฆ - 1120. ๋ฌธ์์ด (0) | 2020.02.28 |
[๋ฐฑ์ค] ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ - 1083. ์ํธ (0) | 2020.02.27 |
[๋ฐฑ์ค] DFS์ BFS - 2468. ์์ ์์ญ(DFS ํ์ด + BFS ํ์ด) (0) | 2020.02.26 |
[๋ฐฑ์ค] ๋์ ๊ณํ๋ฒ - 2579. ๊ณ๋จ ์ค๋ฅด๊ธฐ (0) | 2020.02.25 |