-
[BaekJoon] 12865๋ฒ : ํ๋ฒํ ๋ฐฐ๋ญSW Test/BaekJoon 2021. 4. 20. 02:07๋ฐ์ํ
- ์ด ๊ธ์ c++๋ก ํ์ด๋ฅผ ์์ฑํ์์ต๋๋ค.
๋ฌธ์
์์
ํ์ด
- ์ด ๋ฌธ์ ๋ฅผ ๊ทธ๋ฆฌ๋๋ผ๊ณ ์คํดํ์ฌ ์ค๋ ๋๋น ๊ฐ์น๊ฐ ๊ฐ์ฅ ํฐ ๊ฒฝ์ฐ๋ฅผ ๋ฃ๋๋ค๊ณ ํ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
- ๊ทธ๋ฆฌ๋๊ฐ ์๋ DP๋ก ํด๊ฒฐํด์ผ ํ๋ฉด DP๋ก ์ ๋ช ํ 0-1 knapsack ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
- D[i][w] : ํ์ฌ w ๋ฌด๊ฒ๊ฐ ๋จ์ ์ํ์์ i๋ฒ์งธ item์ ํ๊น์ง ์ต๋ ๊ฐ์น
- if w[i] < w, D[i][w] = max(D[i-1][w-w[i]]+v[i], D[i-1][w]) : i๋ฒ์งธ Item์ ๋ด์ ์ ์๋ค๋ฉด, i-1๋ฒ์งธ๊น์ง Item์ ๋ด์ผ๋ฉด์ ํ์ฌ ๋ด์ ์ ์๋ ๋ฌด๊ฒ๊ฐ w-w[i]๋งํผ ๋จ์ ๊ฒฝ์ ์ ์ต๋ ๊ฐ์นํฉ์ i๋ฒ์งธ Item์ ๊ฐ์น๋ฅผ ํฉํ ๊ฐ๊ณผ D[i-1][w] ๊ฐ ๋น๊ต
- else, D[i][w] = D[i-1][w]
#include<iostream> #include<algorithm> #include<vector> using namespace std; int main(){ int n,m; cin>>n>>m; int arr[105][100005] = {0}; int w[105]={0}; int v[105]={0}; for(int i=1;i<=n;i++){ cin>>w[i]>>v[i]; } w[1] == 1?arr[1][1] = v[1] : arr[1][1] = 0; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(w[i]<=j){ arr[i][j] = max(arr[i-1][j-w[i]] + v[i], arr[i-1][j]); }else{ arr[i][j] = arr[i-1][j]; } } } cout<<arr[n][m]; }
- ์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์ด๋ ์์ ํ ๋ถ๋ถ ์์ผ๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์.
๋ฐ์ํ'SW Test > BaekJoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BaekJoon] 10816๋ฒ : ์ซ์์นด๋ 2 (0) 2021.04.21 [BaekJoon] 1920๋ฒ : ์ ์ฐพ๊ธฐ (0) 2021.04.21 [BaekJoon] 2217๋ฒ : ๋กํ (0) 2021.04.20 [BaekJoon] 1931๋ฒ : ํ์์ค ๋ฐฐ์ (0) 2021.04.20 [BaekJoon] 12852๋ฒ : 1๋ก ๋ง๋ค๊ธฐ 2 (0) 2021.04.19