728x90
https://www.acmicpc.net/problem/16439
16439번: 치킨치킨치킨
첫 번째 줄에 고리 회원의 수 N (1 ≤ N ≤ 30) 과 치킨 종류의 수 M (3 ≤ M ≤ 30) 이 주어집니다. 두 번째 줄부터 N개의 줄에 각 회원의 치킨 선호도가 주어집니다. i+1번째 줄에는 i번째 회원의 선
www.acmicpc.net
순서대로 정리를 해보자면
1. 치킨 3개 고르기 (backtracking) : vector에 치킨 종류 <int> 넣기
2. N명의 만족도 구하기 : 시킨 치킨 3개 중 각 회원의 선호도가 가장 큰 값
3. N개의 만족도를 sum에 누적 합산시키면 answer
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n, m, arr[31][31], ans = 0;
vector<int> chicken;
bool check[31];
void chooseChicken(int cnt, int s){
if(cnt == 3){
int sum = 0;
for(int i=0; i<n; i++){
int maxv = 0;
for(int j=0; j<chicken.size(); j++){
maxv = max(maxv, arr[i][chicken[j]]);
}
sum += maxv;
}
ans = max(ans, sum);
return;
}
for(int i=s; i<m; i++){
if(!check[i]){
check[i] = true;
chicken.push_back(i);
chooseChicken(cnt+1, i);
chicken.pop_back();
check[i] = false;
}
}
}
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> m;
for(int i=0; i<n; i++) for(int j=0; j<m; j++) cin >> arr[i][j];
chooseChicken(0, 0);
cout << ans << '\n';
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준/c++] 2621번: 카드게임 (0) | 2022.07.23 |
---|---|
[백준/c++] 1652번: 누울 자리를 찾아라 (0) | 2022.07.23 |
[백준/c++] 17609번: 회문 (0) | 2022.07.19 |
[백준/c++] 17413번: 단어 뒤집기 2 (0) | 2022.07.19 |
[백준/c++] 16171번: 나는 친구가 적다(Small) (0) | 2022.07.18 |