Skip to content

Commit

Permalink
24-04-29 λΉ„μˆ
Browse files Browse the repository at this point in the history
  • Loading branch information
makehard23 committed Apr 29, 2024
1 parent 0591b50 commit f990038
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 0 deletions.
1 change: 1 addition & 0 deletions yuyu0830/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@
| 4μ°¨μ‹œ | 2024.03.26 | 뢄할정볡 | [ν–‰λ ¬ 제곱](https://www.acmicpc.net/problem/10830) | - |
| 5μ°¨μ‹œ | 2024.03.29 | 탐색 | [μŠ€λ„μΏ ](https://www.acmicpc.net/problem/2239) | - |
| 6μ°¨μ‹œ | 2024.04.03 | 자료ꡬ쑰 | [λ‚˜λ§Œ μ•ˆλ˜λŠ” μ—°μ• ](https://www.acmicpc.net/problem/14621) | - |
| 10μ°¨μ‹œ| 2024.04.29 | λ°±νŠΈλž˜ν‚Ή | [λΉ„μˆ](https://www.acmicpc.net/problem/1799) | - |
---
68 changes: 68 additions & 0 deletions yuyu0830/탐색/1799.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#include <iostream>
#include <vector>

using namespace std;

typedef pair<int, int> ii;

int leftArr[2][11] = {0, };
int rightArr[2][11] = {0, };
int map[11][11] = {0, };

int n, ans[2] = {0, }, m[2] = {0, };
vector<ii> v[2];

void solve(int color, int idx) {
// current color, idx bishop's position
int x = v[color][idx].first;
int y = v[color][idx].second;

// position about each diagonal direction
int rightPos = (x + y) / 2;
int leftPos = ((n - x - 1) + y) / 2;

// if can set bishop in (x, y) position
if (map[x][y] && !rightArr[color][rightPos] && !leftArr[color][leftPos]) {
// then check diagonal position
rightArr[color][rightPos] = 1;
leftArr[color][leftPos] = 1;

// update max value
m[color] = max(m[color], ++ans[color]);

// search same color, another position bishop
for (int i = idx + 1; i < v[color].size(); i++)
solve(color, i);

// set off current bishop
rightArr[color][rightPos] = 0;
leftArr[color][leftPos] = 0;

ans[color]--;
}
}

int main() {
cin >> n;

for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int t; cin >> t;
map[i][j] = t;
// if bishop can set in (i, j) push in vector[board color]
if (t) v[i % 2 != j % 2].push_back(make_pair(i, j));
}
}

for (int color = 0; color < 2; color++) {
for (int i = 0; i < v[color].size(); i++) {
// search every position that can set in bishop
solve(color, i);

// if (left bishop + current max value) less then max value then break this search
if (ans[color] + (v[color].size() - i - 1) < m[color]) break;
}
}

printf("%d\n", m[0] + m[1]);
}

0 comments on commit f990038

Please sign in to comment.