Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

10-yuyu0830 #39

Merged
merged 3 commits into from
May 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion yuyu0830/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@
| 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) | - |
| 7μ°¨μ‹œ | 2024.04.04 | μ €μšΈ | [μ €μšΈ](https://www.acmicpc.net/problem/2437) | - |
| 7μ°¨μ‹œ | 2024.04.04 | μ €μšΈ | [μ €μšΈ](https://www.acmicpc.net/problem/2437) | - |
| 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]);
}