File tree 1 file changed +40
-3
lines changed 1 file changed +40
-3
lines changed Original file line number Diff line number Diff line change 1
1
// Authored by : BaaaaaaaaaaarkingDog
2
2
// Co-authored by : -
3
- // http://boj.kr/****************
3
+ // http://boj.kr/2532d97629b04d7c86f15db6bee08772
4
4
#include < bits/stdc++.h>
5
5
using namespace std ;
6
6
7
- int main (void ){
7
+ int n, m;
8
+ long long state[10 ];
9
+
10
+ int bit_cnt (long long x){
11
+ int ret = 0 ;
12
+ for (int i = 0 ; i < m; i++){
13
+ ret += (x >> i) & 1 ;
14
+ }
15
+ return ret;
16
+ }
17
+
18
+ int main (){
8
19
ios::sync_with_stdio (0 );
9
20
cin.tie (0 );
10
21
11
- }
22
+ cin >> n >> m;
23
+ for (int i = 0 ; i < n; i++){
24
+ string name, tmp; // name은 사실 의미없음
25
+ cin >> name >> tmp;
26
+ for (int j = m-1 ; j >= 0 ; j--){
27
+ state[i] = (state[i] << 1 ) | (tmp[j] == ' Y' );
28
+ }
29
+ }
30
+
31
+ pair<int , int > ans = {0 , -1 }; // {연주할 수 있는 곡의 수, 필요한 기타의 수}
32
+ for (int tmp = 0 ; tmp < (1 << n); tmp++){
33
+ long long comb = 0 ; // 조합한 결과
34
+ for (int i = 0 ; i < m; i++){
35
+ if ((tmp & (1LL << i)) == 0 )
36
+ continue ;
37
+ comb |= state[i];
38
+ }
39
+ int song_num = bit_cnt (comb);
40
+ int guitar_num = bit_cnt (tmp);
41
+ if (ans.first < song_num) // 1. 연주할 수 있는 곡의 수가 더 많을 경우
42
+ ans = {song_num, guitar_num};
43
+ // 2. 연주할 수 있는 곡의 수는 같은데 필요한 기타의 수가 더 적을 경우
44
+ else if (ans.first == song_num && ans.second > guitar_num)
45
+ ans = {song_num, guitar_num};
46
+ }
47
+ cout << ans.second << ' \n ' ;
48
+ }
You can’t perform that action at this time.
0 commit comments