๐Ÿ“ฆ Chango/๐Ÿฃ EDOC

[์‹œ๊ฐ„][BOJ][C++] ๋ฐฑ์ค€ 20044๋ฒˆ: Project Teams

์„ ๋‹ฌ 2021. 9. 29. 17:46
๋ฐ˜์‘ํ˜•

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

 

20044๋ฒˆ: Project Teams

์ž…๋ ฅ์€ ํ‘œ์ค€์ž…๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ž…๋ ฅ์˜ ์ฒซ ๋ฒˆ์งธ ํ–‰์—๋Š” ํŒ€ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์–‘์˜ ์ •์ˆ˜ n(1 ≤ n ≤ 5,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ ํ–‰์— ํ•™์ƒ si ์˜ ์ฝ”๋”ฉ ์—ญ๋Ÿ‰ w(si)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 2n๊ฐœ์˜ ์–‘์˜ ์ •์ˆ˜๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ

www.acmicpc.net

 

๋ฌธ์ œ

์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ ์ˆ˜์—…์„ ๊ฐ€๋ฅด์น˜๋Š” ์ˆ˜์ฐฌ์ด๋Š” ํ”„๋กœ์ ํŠธ ํŒ€์„ ๊ฐ€๋Šฅํ•˜๋ฉด ๊ณต์ •ํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ ํŒ€ ํ•˜๋‚˜๋Š” ๋‘ ๋ช…์˜ ํ•™์ƒ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ, ๊ฐ ํ•™์ƒ๋“ค์˜ ์ฝ”๋”ฉ ์—ญ๋Ÿ‰์€ ๋ชจ๋‘ ๋‹ค๋ฅด๋‹ค. ๊ฐ ํ•™์ƒ์€ ํ•œ ํŒ€์˜ ํŒ€์›์ด์–ด์•ผ ํ•œ๋‹ค. ๊ณต์ •์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ˆ˜์ฐฌ์ด๋Š” ํŒ€์› ์ฝ”๋”ฉ ์—ญ๋Ÿ‰์˜ ํ•ฉ์„ ์ตœ๋Œ€ํ•œ ์ผ์ •ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํ•™์ƒ๋“ค์ด ์ฝ”๋”ฉ ์—ญ๋Ÿ‰์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ์ˆ˜์ฐฌ์ด๊ฐ€ ํŒ€์„ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ๋„์›€์ด ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.

๋ฌธ์ œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด, ํ•™์ƒ ์ˆ˜๋Š” 2n์ด๋ผ ๊ฐ€์ •ํ•˜์ž (n์€ ์–‘์˜ ์ •์ˆ˜). ๊ฐ ํ•™์ƒ si์˜ ์ฝ”๋”ฉ ์—ญ๋Ÿ‰์€ ์–‘์˜ ์ •์ˆ˜ w(si)๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ํ•œ i๋ฒˆ์งธ ํŒ€ Gi์˜ ์ฝ”๋”ฉ ์—ญ๋Ÿ‰์€ w(Gi) = ∑s∈Giw(s)๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ž‘์„ฑํ•  ํ”„๋กœ๊ทธ๋žจ ๋ชฉ์ ์€ Sm = min{w(Gi) | 1 ≤ i  n}์ด ์ตœ๋Œ€ํ™”๋˜๋„๋ก n๊ฐœ์˜ ํŒ€ G1, G2, …, Gn ์„ ๊ตฌ์„ฑํ•˜๊ณ  ์ด๋•Œ Sm์„ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ•™์ƒ๋“ค์˜ ์ฝ”๋”ฉ ์—ญ๋Ÿ‰์ด {1, 7, 5, 8}๋กœ ์ฃผ์–ด์กŒ๋‹ค๋ฉด (8, 1), (7, 5)๋กœ 2๊ฐœ์˜ ์กฐ๋ฅผ ์งค ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์€ 9๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

์ž…๋ ฅ

์ž…๋ ฅ์€ ํ‘œ์ค€์ž…๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ž…๋ ฅ์˜ ์ฒซ ๋ฒˆ์งธ ํ–‰์—๋Š” ํŒ€ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์–‘์˜ ์ •์ˆ˜ n(1 ≤ n ≤ 5,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ ํ–‰์— ํ•™์ƒ si ์˜ ์ฝ”๋”ฉ ์—ญ๋Ÿ‰ w(si)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 2n๊ฐœ์˜ ์–‘์˜ ์ •์ˆ˜๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์ฃผ์–ด์ง„๋‹ค (1 ≤ w(si) ≤ 100,000). ํ•™์ƒ๋“ค์˜ ์ฝ”๋”ฉ ์—ญ๋Ÿ‰์€ ๋ชจ๋‘ ๋‹ค๋ฅด๋‹ค. ์ฆ‰, i  j์ด๋ฉด w(si) ≠ w(sj)์ด๋‹ค.

์ถœ๋ ฅ

์ถœ๋ ฅ์€ ํ‘œ์ค€์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ‘œ์ค€์ถœ๋ ฅ ํ•œ ํ–‰์— Sm์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

#include <iostream>
#include <algorithm>

using namespace std;

int ans;

void MakePair(int arr[], int n){
    
    // ๋ฐฐ์—ด ๊ฐฏ์ˆ˜๊ฐ€ 2๋‚˜ 3์ด๋ฉด ๋” ์ž‘์€์ชฝ์„ ๋ฆฌํ„ด
    if(n==2){
        ans = arr[0];
    }
    else if(n==3){
        if(arr[0]+arr[2] > arr[1]) ans= arr[1];
        else ans= arr[0]+arr[2];
    }
    
    //๊ณ„์‚ฐ
    int tmp = n/2;
    int new_arr[tmp];
    for(int i=0; i<tmp; i++){
        new_arr[i] = arr[i] + arr[n-1-i];
    }
    sort(new_arr, new_arr+tmp);
    
    if(n%2 == 1){
        //n์ด ํ™€์ˆ˜์ผ๋•Œ ์ •๊ฐ€์šด๋ฐ ์ˆ˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ชฝ์— ๋”ํ•ด๋ฒ„๋ฆฐ๋‹ค.
        new_arr[0] += arr[tmp];
        sort(new_arr, new_arr+tmp);
    }

    MakePair(new_arr, tmp);
}

int main () {
    int n;
    cin >> n;
    int arr[n];
    for(int i=0; i<n; i++){
        cin >> arr[i];
    }
    
    sort(arr, arr+n);
    MakePair(arr, n);
    
    cout << ans;
    
}
๋ฐ˜์‘ํ˜•