[C++, Golang] 12865๋ฒ: ํ๋ฒํ ๋ฐฐ๋ญ
ํด๋น ๊ธ์ ๋ด์ฉ์ ์ต์ ์ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ ๊ธ์ด์ด์ ์ฃผ๊ด์ ์ธ ํ์ด์ ๋๋ค. ๋ ์ข์ ํ์ด๊ฐ ์๋ค๋ฉด ๋๊ธ๋ก ํผ๋๋ฐฑ ๋ถํ๋๋ฆฝ๋๋ค(__)
๋งํฌ
https://www.acmicpc.net/problem/12865
๋ฌธ์ ์ค๋ช
์ด ๋ฌธ์ ๋ ์์ฃผ ํ๋ฒํ ๋ฐฐ๋ญ์ ๊ดํ ๋ฌธ์ ์ด๋ค.
ํ ๋ฌ ํ๋ฉด ๊ตญ๊ฐ์ ๋ถ๋ฆ์ ๋ฐ๊ฒ ๋๋ ์ค์๋ ์ฌํ์ ๊ฐ๋ ค๊ณ ํ๋ค. ์ธ์๊ณผ์ ๋จ์ ์ ์ฌํผํ๋ฉฐ ์ต๋ํ ์ฆ๊ธฐ๊ธฐ ์ํ ์ฌํ์ด๊ธฐ ๋๋ฌธ์, ๊ฐ์ง๊ณ ๋ค๋ ๋ฐฐ๋ญ ๋ํ ์ต๋ํ ๊ฐ์น ์๊ฒ ์ธ๋ ค๊ณ ํ๋ค.
์ค์๊ฐ ์ฌํ์ ํ์ํ๋ค๊ณ ์๊ฐํ๋ 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
ํ์ด
[Golang]
package main
import (
"bufio"
"fmt"
"os"
)
var (
N, K int
ObjectInfoSlice []Object
ResultSlice [][]int
)
type Object struct {
Weight,Value int
}
func max(a, b int) int {
if a > b {
return a
} else {
return b
}
}
func main() {
r := bufio.NewReader(os.Stdin)
_, _ = fmt.Fscanf(r, "%d %d\n", &N, &K)
ResultSlice = make([][]int, K+1)
for i := 0; i <= K; i++ {
ResultSlice[i] = make([]int, N+1)
}
ObjectInfoSlice = make([]Object, N+1)
for i := 1; i <= N; i++ {
var weight, value int
_, _ = fmt.Fscanf(r, "%d %d\n", &weight, &value)
ObjectInfoSlice[i] = Object{
Weight: weight,
Value: value,
}
}
for bagWeight := 1; bagWeight <= K; bagWeight++ {
for objectIndex := 1; objectIndex <= N; objectIndex++ {
object := ObjectInfoSlice[objectIndex]
if bagWeight >= object.Weight {
ResultSlice[bagWeight][objectIndex] = max(ResultSlice[bagWeight][objectIndex-1], ResultSlice[bagWeight-object.Weight][objectIndex-1] + ObjectInfoSlice[objectIndex].Value)
} else {
ResultSlice[bagWeight][objectIndex] = ResultSlice[bagWeight][objectIndex-1]
}
}
}
fmt.Print(ResultSlice[K][N])
}
[C++]
#include <iostream>
struct Object
{
int weight;
int value;
};
int max(int a, int b)
{
if (a > b)
{
return a;
}
else
{
return b;
}
}
int main()
{
std::cin.tie(NULL);
std::ios::sync_with_stdio(false);
int n, k;
std::cin >> n >> k;
int** arr = new int*[k + 1];
for (int i = 0; i <= k; i++)
{
arr[i] = new int[n+1];
std::fill_n(arr[i], n + 1, 0);
}
Object* objectArr = new Object[n + 1];
for (int i = 1; i <= n; i++)
{
std::cin >> objectArr[i].weight >> objectArr[i].value;
}
for (int bagWeight = 1; bagWeight <= k; bagWeight++)
{
for (int objectIndex = 1; objectIndex <= n; objectIndex++)
{
Object obj = objectArr[objectIndex];
if (bagWeight >= obj.weight)
{
arr[bagWeight][objectIndex] = max(arr[bagWeight][objectIndex-1], arr[bagWeight - obj.weight][objectIndex-1] + obj.value);
}
else
{
arr[bagWeight][objectIndex] = arr[bagWeight][objectIndex-1];
}
}
}
std::cout << arr[k][n];
return 0;
}
ํ์ด ์ค๋ช
์ผ๋ฐ์ ์ธ ์ฌ๊ทํจ์ํํ๋ก ํ๋ฉด(DFS,...) ์๊ฐ ์ด๊ณผ๋ก ์คํจํ๋ค.
n ๊ฐ์ ์์์์ x๊ฐ๋ฅผ ๋ฝ๋ ๊ฒ์ด ์๋ ๋ฐฐ๋ญ์ ๋ฃ์ ์ ์๋ ๋งํผ์ ๋ชจ๋ ์ฐ์ฐ์ ํ๋ค ๋ณด๋
nC0 + nC1 + ... + nC r = 2^n
๋ผ๋ ์๊ฐ์ด ์์๋๊ณ ์๊ฐ์ด๊ณผ ๋ ์๋ฐ์ ์๋ค.
๋ฐ๋ผ์ ๋์ ๊ณํ๋ฒ(๋์ ํ๋ก๊ทธ๋๋ฐ, DP)์ผ๋ก ํ์ดํ๋ค.
์ฌ์ค, ์ด ๋ฌธ์ ๋ knapsack ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ์ ๋ฌธ์ ์ด๋ค.
'Algorithm > ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++, Golang] 2798๋ฒ: ๋ธ๋์ญ (0) | 2020.07.14 |
---|---|
[C++, Golang, Java] 14888๋ฒ: ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (0) | 2020.07.10 |
[C++, Golang] 11729๋ฒ: ํ๋ ธ์ด ํ ์ด๋ ์์ (0) | 2020.07.10 |
[C++, Golang] 2012๋ฒ: ๋ฑ์ ๋งค๊ธฐ๊ธฐ (0) | 2020.07.08 |
[C++] 2447๋ฒ: ๋ณ์ฐ๊ธฐ - 10 (0) | 2020.07.07 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[C++, Golang] 2798๋ฒ: ๋ธ๋์ญ
[C++, Golang] 2798๋ฒ: ๋ธ๋์ญ
2020.07.14 -
[C++, Golang, Java] 14888๋ฒ: ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ
[C++, Golang, Java] 14888๋ฒ: ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ
2020.07.10 -
[C++, Golang] 11729๋ฒ: ํ๋ ธ์ด ํ ์ด๋ ์์
[C++, Golang] 11729๋ฒ: ํ๋ ธ์ด ํ ์ด๋ ์์
2020.07.10 -
[C++, Golang] 2012๋ฒ: ๋ฑ์ ๋งค๊ธฐ๊ธฐ
[C++, Golang] 2012๋ฒ: ๋ฑ์ ๋งค๊ธฐ๊ธฐ
2020.07.08