<링크>

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*- div * C > 0)
                    sum += piece * W*- 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

+ Recent posts