<링크>
https://www.acmicpc.net/problem/1421
<풀이>
길이를 1부터 현재 갖고있는 나무 중 최대값까지 체크하며 얼마를 벌 수 있는지 확인한다.
자르는데 드는 횟수는
나누어 떨어졌을때는 나뉜조각의 개수-1, 나누어 떨어지지 않을 때는 나뉜조각의 개수 자체이다.
또한 주의해야할 점은
자르는 비용이 조각을 팔았을때보다 더 든다면 그 나무는 아예 안팔아버리는 게 맞기 때문에
무조건 sum에 합하면안되고 조건을 따져서 합해야한다.
<소스코드>
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 | #include<stdio.h> int tree[1001]; int main() { int N, C, W; scanf("%d%d%d", &N, &C, &W); int max = 0; for (int i = 0; i < N; ++i) { scanf("%d", tree + i); if (max < tree[i]) max = tree[i]; } int res = 0; for (int i = 1; i <= max; ++i) { int sum = 0; for (int j = 0; j < N; ++j) { if (tree[j] >= i) //더 작으면 자를 수도 없고 아예 팔수가없는거니깐 제외 { int piece, div; piece = tree[j] / i; // 길이 i에 나올수있는 조각의 수 if (tree[j] % i == 0) div = tree[j] / i - 1; // 자르는비용 else div = tree[j] / i; if (piece * W*i - div * C > 0) sum += piece * W*i - div * C; } } if (sum > res) { res = sum; } } printf("%d", res); } | cs |
'알고리즘 풀이 > 브루트 포스' 카테고리의 다른 글
백준 15686 치킨배달 (0) | 2018.09.30 |
---|---|
백준 1107 리모컨 (2) | 2018.07.26 |
KOITP 고장난시계 (0) | 2018.07.23 |
백준 14888 연산자 끼워넣기 :: 들짐승 (0) | 2018.07.22 |