PS/BOJ

백준 14938 (C++) 서강그라운드

akinakamori 2021. 9. 30. 13:38
728x90
SMALL

문제 이해

평범한 플로이드 와샬 문제다.

map[i][j] = min(map[i][j], map[i][k] + map[k][j]); 

정말 평범한 플로이드 와샬 문제를 풀고싶다면: https://www.acmicpc.net/problem/11404

 

11404번: 플로이드

첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가

www.acmicpc.net

 

 

여기서 아이템의 개수를 저장할 배열을 추가로 만든다.

그리고 예은이가 갈 수 있는 범위 안에서 아이템의 개수를 전부 더해주고, max함수로 매번 갱신하면 된다.

 

다시 말해서,

 

예은이가 도달할 지역 n개를 전부 체크한다.

1번 지역에 도착했다면, 1번 지역의 아이템 개수를 더하고, 1번 지역에서 갈 수 있는 범위에 있는 아이템을 전부 더한다.

2번 지역에서도 동일하게 진행한다

3번 지역에서도 

.

.

.

n개 지역에서 체크한 아이템의 합 중 최대값이 문제의 답이 될 것이다.

 

 

 

 

 

 

 

 


 

 

코드

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
using ll = long long;
const int INF = 1e8;
const int MAX = 100;
int n, m, r, sum=0, ans=0;
int map[MAX][MAX];
int item[MAX];
void fw() {
    for (int k = 1; k <= n; k++) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                map[i][j] = min(map[i][j], map[i][k] + map[k][j]);
            }
        }
    }
    for (int i = 1; i <= n; i++) {
        sum += item[i];
        for (int j = 1; j <= n; j++) {
            if (i != j && map[i][j] <= m) {
                sum += item[j];
            }
        }
        ans =max(ans, sum);
        sum = 0;
    }
    cout << ans;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    cin >> n >> m >> r;
    for (int i = 1; i <= n; i++) {
        int t;
        cin >> t;
        item[i] = t;
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            map[i][j] = INF;
            if (i == j) map[i][j] = 0;
        }
    }
    for (int i = 1; i <= r; i++) {
        int a, b, l;
        cin >> a >> b >> l;
        map[a][b] = map[b][a] = l;
    }
    fw();
    return 0;
}

 

https://www.acmicpc.net/problem/14938

 

14938번: 서강그라운드

예은이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역중 하나의 지역에 낙하산을 타고 낙하하여, 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을

www.acmicpc.net

 

얏호~ 내 이름 검색해서 나오길래 풀었다.

728x90
LIST

'PS > BOJ' 카테고리의 다른 글

백준 17498 (C++) 폴짝 게임  (2) 2021.10.06
백준 17398 (C++) 통신망 분할  (3) 2021.10.04
백준 20044 (C++) Project Teams  (0) 2021.09.30
백준 1931 (C++) 회의실 배정  (0) 2021.09.30
백준 11720 (C++) 숫자의 합  (0) 2021.09.29