https://www.acmicpc.net/problem/19942
1. 벡터사전순 정렬방법
vector<vector<int>> 에 넣고 sort 돌리고 vv[0]을 취하면 된다.
if (ret == w) {
vector<vector<int>> vv;
vv.push_back(tmp);
vv.push_back(arr);
sort(vv.begin(), vv.end());
arr = vv[0];
}
2. 전체코드
#include <bits/stdc++.h>
using namespace std;
int n, m, mp, mf, ms, mv;
int a[15][5];
int ret = 987654321;
vector<int> arr;
int main() {
cin.tie(0);
cin >> n >> mp >> mf >> ms >> mv;
for (int i = 0; i < n; ++i) {
cin >> a[i][0] >> a[i][1] >> a[i][2] >> a[i][3]>>a[i][4];
}
for (int subset = 1; subset < (1 << n); ++subset) {
int p = 0, f = 0, s = 0, v = 0, w=0;
vector<int> tmp;
for (int i = 0; i < n; ++i) {
if (subset & (1 << i)) { //subset돌면서 1이 켜졌는지 검사
p += a[i][0];
f += a[i][1];
s += a[i][2];
v += a[i][3];
w += a[i][4];
tmp.push_back(i+1);
}
}
//cout << p << " " << f << " " << s << " " << v << " \n";
if (p >= mp && f >= mf && s >= ms&& v>=mv) {
if (ret > w) {
ret = w;
arr = tmp;
}
if (ret == w) {
vector<vector<int>> vv;
vv.push_back(tmp);
vv.push_back(arr);
sort(vv.begin(), vv.end());
arr = vv[0];
}
}
}
if (ret == 987654321) {
cout << -1;
return 0;
}
cout << ret << "\n";
for (auto i : arr) cout << i << " ";
return 0;
}
'Algorithm > 비트마스킹' 카테고리의 다른 글
프로그래머스 메뉴리뉴얼 c++ // 비트마스킹 조합 (0) | 2024.01.08 |
---|---|
백준 17471 게리멘더링 c++ // 비트마스킹, dfs (0) | 2023.12.21 |
백준 1285 동전뒤집기 c++ // 비트마스킹 개선방법 (0) | 2023.12.20 |
프로그래머스 양과늑대 c++ // 상태기반 dfs 방법 , 비트마스킹 (0) | 2023.12.12 |
프로그래머스 양궁대회 c++ // 비트마스킹 하는 방법, 완전탐색 (0) | 2023.12.12 |