[백준/BOJ] 백준 23083번 : 꿀벌 승연이
2023. 10. 16. 21:32ㆍ알고리즘 문제풀이
https://www.acmicpc.net/problem/23083
다이나믹 프로그래밍을 이용해 cache[x][y]에 (x, y)에서 (n, m) 위치로 가는 경우의 수를 저장해서 문제를 해결했다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n, m;
int k;
int hole[1005][1005];
vector<vector<long long>> cache(1005, vector<long long>(1005, -1));
long long solve(int x, int y) {
if (x > n || y > m || x < 1 || y < 1) {
return 0;
}
if (hole[x][y] == 1) {
return 0;
}
if (x == n && y == m) {
return 1;
}
long long& ret = cache[x][y];
if (ret != -1) {
return ret;
}
ret = 0;
//아래쪽으로 갈 때
ret = (ret + (solve(x + 1, y) + 1000000007) % 1000000007);
//오른쪽 위로 갈 때
if (y % 2 == 1) {
ret = (ret + (solve(x - 1, y + 1) + 1000000007) % 1000000007);
}
else {
ret = (ret + (solve(x, y + 1) + 1000000007) % 1000000007);
}
//오른쪽 아래로 갈 때
if (y % 2 == 1) {
ret = (ret + (solve(x, y + 1) + 1000000007) % 1000000007);
}
else {
ret = (ret + (solve(x + 1, y + 1) + 1000000007) % 1000000007);
}
return ret % 1000000007;
}
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n >> m;
cin >> k;
for (int i = 0; i < k; i++) {
int x, y;
cin >> x >> y;
hole[x][y] = 1;
}
cout << solve(1, 1);
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 16954번 : 움직이는 미로 탈출 (0) | 2023.10.16 |
---|---|
[백준/BOJ] 백준 7573번 : 고기잡이 (0) | 2023.10.16 |
[백준/BOJ] 백준 27651번 : 벌레컷 (1) | 2023.10.16 |
[백준/BOJ] 백준 9874번 : Wormholes (1) | 2023.10.16 |
[백준/BOJ] 백준 27882번 : 가희와 지하철역 저장 시스템 2 (1) | 2023.10.13 |