VioletaBabel
체스판 위의 길 (실패) 본문
#include<cstdio>
using namespace std;
int main(void)
{
int T, test_case, n, m, k, **chess;
setbuf(stdout, NULL);
scanf("%d", &T);
for (test_case = 0; test_case < T; test_case++)
{
scanf("%d %d %d", &n, &m, &k);
chess = new int*[n + 1];
for (int i = 0; i < n + 1; ++i)
chess[i] = new int[m + 1];
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
chess[i][j] = 0;
for (int i = 0, x, y; i < k; ++i, chess[x][y] = -1)
scanf("%d %d", &x, &y);
for (int i = 1, a = 1; i <= n; ++i)
{
if (chess[i][1] == -1)
a = -1;
chess[i][1] = a;
}
for (int i = 2, a = 1; i <= m; ++i)
{
if (chess[1][i] == -1)
a = -1;
chess[1][i] = a;
}
for(int i = 2; i <= n; ++i)
for (int j = 2; j <= m; ++j)
{
if (chess[i][j] == -1)
continue;
chess[i][j] = chess[i - 1][j] + chess[i][j - 1];
if (chess[i - 1][j] == -1 && chess[i][j - 1] == -1)
chess[i][j] = -1;
else if (chess[i - 1][j] == -1 || chess[i][j - 1] == -1)
chess[i][j] = (chess[i - 1][j] > chess[i][j - 1]) ? chess[i - 1][j] : chess[i][j - 1];
chess[i][j] %= 1000000007;
}
printf("Case #%d\n%d\n", test_case + 1, chess[n][m]);
for (int i = 0; i < n + 1; ++i)
delete[] chess[i];
delete[] chess;
}
return 0;
}
============이건 메모리초과 날만한듯..
'알고리즘문제들 > codeground' 카테고리의 다른 글
태준이의 걱정 (0) | 2017.06.28 |
---|---|
개구리 뛰기 (0) | 2017.06.17 |
화학자의 문장 (99점) (0) | 2017.06.16 |
블럭 없애기 (실패) (0) | 2017.06.16 |
미궁 속의 방 (0) | 2017.06.16 |