ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SWEA] 3752번 가능한 시험 점수
    문제 풀이 2020. 4. 18. 22:24

    3752 가능한 시험 점수


    풀이)

    백준 2293 동전 문제와 비슷한 문제이다.


    bool visited[10001]변수를 두어, 

    점수들의 합 i이 나올 수 있을 경우 visited[i] = true로 바꿔줬다.


    (크기를 10001로 둔 이유? 배점의 최고값 100 * n의 최대값 100 = 10000이므로)


    코드)


    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
    #include <stdio.h>
    #include <algorithm>
    using namespace std;
     
    int n;
    int arr[100];
    bool visited[10001];
     
    int main() {
        //freopen("sample_input.txt", "r", stdin);
        int T = 0;
        scanf("%d"&T);
        for (int test_case = 1; test_case <= T; test_case++) {
            scanf("%d"&n);
            for (int i = 0; i < n; i++) {
                scanf("%d"&arr[i]);
            }
            int Max = 0;
            visited[0= true//아무문제도 안맞췄을 경우 0점.
            for (int i = 0; i < n; i++) {
                Max += arr[i]; //새로운 점수 더해주고
                for (int j = Max; j >= 0; j--) { //이전에 가능한 점수 + 새로 받은 점수 체크해주기
                    if (visited[j]) visited[j + arr[i]] = true;
                }
                visited[arr[i]] = true;
            }
            int result = 0;
            for (int i = 0; i < 10001; i++) {
                if (visited[i]) result += 1;
            }
            printf("#%d %d\n", test_case, result);
            
            fill(visited, visited + 10001false);
            
        }
        return 0;
    }
    cs

    댓글

Designed by Tistory.