티스토리 뷰

Algorithm/BOJ

14889 스타트와 링크

henry1214 2018. 4. 9. 15:48

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



팀을 절반씩 나누는 모든 경우를 만들어서 능력치의 차이를 계산해본다. 최대 20C10 = 184756 이므로 시간 내에 충분히 수행될 수 있음을 알 수 있다.



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
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
#define INF 987654321
using namespace std;
 
int n,a[20][20],v[20],ans=INF;
 
void solve()
{
    vector<int> start,link;
    for(int i=0;i<n;i++)
        v[i]?start.push_back(i):link.push_back(i);
    int s1=0,s2=0;
    for(int i=0;i<n/2-1;i++for(int j=i+1;j<n/2;j++)
        s1+=a[start[i]][start[j]]+a[start[j]][start[i]];
    for(int i=0;i<n/2-1;i++for(int j=i+1;j<n/2;j++)
        s2+=a[link[i]][link[j]]+a[link[j]][link[i]];
    ans=min(ans,abs(s1-s2));
}
 
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++for(int j=0;j<n;j++scanf("%d",&a[i][j]);
    for(int i=0;i<n/2;i++) v[i]=-1;
    do solve(); while(next_permutation(v,v+n));
    printf("%d\n",ans);
    return 0;
}
cs


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

14891 톱니바퀴  (0) 2018.04.09
14890 경사로  (0) 2018.04.09
14888 연산자 끼워넣기  (0) 2018.04.09
14503 로봇 청소기  (0) 2018.04.09
14502 연구소  (0) 2018.04.09
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday