https://www.acmicpc.net/problem/3980
목적
11명의 선수의 포지션 별 능력치가 주어지고, 각 포지션에 배치했을 때 능력치의 최대합을 구하자.
접근법
1. DFS 완전탐색으로 접근하자.
2. 포지션에 능력치가 0인 선수는 배치 불가하니 이에 대한 처리를 해준다.
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
|
#include<iostream>
#include<cmath>
#include<cstring>
#define f(i,l,r) for(int i=l;i<r;++i)
using namespace std;
const int mn=-1100;
int s[11][11],cache[1<<11];
int maxSum(int i,int bitset){
if(i==11)return 0;
int& ref=cache[bitset];
if(ref!=-1)return ref;
ref=mn;
f(j,0,11)if(!((1<<j)&bitset)&&s[j][i])ref=max(ref,s[j][i]+maxSum(i+1,bitset|(1<<j)));
return ref;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while (t--) {
f(i, 0, 11)f(j, 0, 11)cin >> s[i][j];
memset(cache,-1,sizeof(cache));
cout << maxSum(0, 0) << '\n';
}
}
|
문제 설명과 코드에 대한 피드백은 언제나 환영합니다.
다양한 의견 댓글로 남겨주세요.
'Problem Solving > BOJ 백준' 카테고리의 다른 글
[ BOJ 백준 3649번 - 로봇 프로젝트 ] 해설 및 코드 (0) | 2019.12.16 |
---|---|
[ BOJ 백준 3056번 - 007 ] 해설 및 코드 (0) | 2019.12.16 |
[ BOJ 백준 3090번 - 차이를 최소로 ] 해설 및 코드 (0) | 2019.12.14 |
[ BOJ 백준 15732번 - 도토리 숨기기 ] 해설 및 코드 (0) | 2019.12.13 |
[ BOJ 백준 2585번 - 경비행기 ] 해설 및 코드 (2) | 2019.12.13 |