일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 경제
- 알고리즘트레이닝
- 책알남
- C
- 지혜를가진흑곰
- 자바스크립트
- 돈
- 알고리즘공부
- 책을알려주는남자
- 독후감
- 주식
- algorithmTest
- algorithmtraining
- 알고리즘 공부
- C++
- algorithmStudy
- 서평
- 화장품
- 프로그래머스 알고리즘 공부
- 성분
- 투자
- Java
- 다독
- 재테크
- 백준알고리즘
- 채권
- JavaScript
- 프로그래밍언어
- 자바
- 독서
Archives
- Today
- Total
탁월함은 어떻게 나오는가?
[Algorithm] 욕심쟁이 알고리즘 배낭무게 문제풀이 [C++] 본문
반응형
[개념과 원리]
최대 용량 M인 하나의 배낭과 n개의 물체가 있고, 각 물체 i에는 물체의 무게 wi와 해당 물체를 배낭에 넣었을 때 얻을 수 있는 이익 pi가 부여되었다고 가정한다. 배낭(kanpsack) 문제는 배낭의 용량을 초과하지 않는 범위 내에서 배낭에 들어 있는 물체의 이익의 합이 최대가 되도록 물체를 넣는 방법을 찾는 문제이다. 여기서는 물체를 쪼개서 넣을 수 있다고 가정한다.
[코드]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#include <iostream>
using namespace std;
int main() {
int M = 10; // 배낭의 무게
int n = 4; // 물건의 개수
int p[4] = { 14, 15, 20, 9 }; // 물체 i의 이익
int w[4] = { 4, 3, 5, 3 }; // 물체 i의 무게
double result[4]; // 무게 / 이익 로 나눈 결과 (소수점 포함하기 위해서)
int rangking[4]; // 1kg당 단위 이익이 랭킹 부여
int x[4]; // 배낭에 들어간 물체 i의 비율
for (int i = 0; i < n; ++i) {
result[i] = (double)p[i] / (double)w[i];
rangking[i] = 0;
x[i] = 0;
}
for (int i = 0; i < n; ++i) {
int rank = 1;
for (int j = 0; j < n; ++j) {
if (result[i] < result[j]) {
rangking[i] = rank++;
}
}
}
int r = M;
int totalBenefit = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (i == rangking[j]) {
if (w[j] < r) {
r -= w[j];
totalBenefit += p[j];
}
else {
double num = (double) p[j] / (double) w[j];
totalBenefit += (r * num);
r -= r;
}
if (r == 0) break;
}
}
}
// 가방에 들어간 최대 이익
cout << "totalBenefit :: " << totalBenefit << endl;
return 0;
}
|
cs |
반응형
'[Snow-ball]프로그래밍(컴퓨터) > Algorithm' 카테고리의 다른 글
[Algorithm] 혼자서 하는 틱택토 ( Programmers / Python ) (0) | 2024.06.11 |
---|---|
[Algorithm] 달리기 경주 (JavaScript - Programmers) (0) | 2023.04.11 |
[algorithm 이론] for문 사용할때 i++, ++i는 어떤 차이가 있을까? (0) | 2022.03.16 |
[algorithm 이론] 자주 접할 수 있는 알고리즘시간 복잡도 정리 (0) | 2022.03.15 |
[알고리즘] 퀵 정렬(Quick Sort) 알고리즘 개념과 원리에 대해 쉽고 빠르게 공부해보자 [C언어] (0) | 2022.02.03 |
Comments