求助大佬

P1002 [NOIP2002 普及组] 过河卒

如果dp写的不对请指出,我是蒟蒻(
by sumlen @ 2023-10-03 16:59:09


内层循环是从 $1$ 到 $m$。
by modfish @ 2023-10-03 16:59:59


@[modfish](/user/605226) 大佬!还是爆零啊!
by sumlen @ 2023-10-03 19:25:33


下标是从 $0$ 开始的。 其实只要把你的第零行和第零列在循环外初始化一下就行了。 比如这样(这里只是列的初始化): ```cpp for(int i = 0; i <= n; i ++){ if(cant(x, y, i, 0)) break; //这里的cant()是用来算卒能不能走的 dp[i][0] = 1; } ``` 然后两层循环内就只需要一句: ```cpp if(!cant(x, y, i, j)) dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; ``` 就可以了。
by modfish @ 2023-10-03 19:36:30


@[modfish](/user/605226) 爆了三个点 ``` #include <bits/stdc++.h> using namespace std; int mx[9], my[9]; int dp[30][30]; int n, m; bool cheek(int x, int y) { for (int i = 0; i <= 8; i++) { if (x == mx[i] && y == my[i]) return 1; } return 0; } int main() { cin >> n >> m >> mx[0] >> my[0]; mx[1] = mx[0] - 2, my[1] = my[0] - 1; mx[2] = mx[0] - 2, my[2] = my[0] + 1; mx[3] = mx[0] - 1, my[3] = my[0] - 2; mx[4] = mx[0] - 1, my[4] = my[0] + 2; mx[5] = mx[0] + 2, my[5] = my[0] - 1; mx[6] = mx[0] + 2, my[6] = my[0] + 1; mx[7] = mx[0] + 1, my[7] = my[0] - 2; mx[8] = mx[0] + 1, my[8] = my[0] + 2; for (int i = 0; i <= n; i ++) { if (cheek( i, 0)) break; dp[i][0] = 1; } for (int i = 0; i <= m; i ++) { if (cheek( 0, i)) break; dp[0][i] = 1; } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (!cheek(i, j)) dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; } } cout << dp[n][m]; return 0; } ```
by sumlen @ 2023-10-04 15:28:32


@[sumlen](/user/723796) ```cpp for (int j = 1; j <= n; j++) ``` 你这句不还是没改过来吗……
by modfish @ 2023-10-04 20:57:45


@[modfish](/user/605226) byd我傻了
by sumlen @ 2023-10-05 08:46:17


@[modfish](/user/605226) byd又爆了,60分 红的34 ``` #include <bits/stdc++.h> using namespace std; int mx[9], my[9]; int dp[30][30]; int n, m; bool cheek(int x, int y) { for (int i = 0; i <= 8; i++) { if (x == mx[i] && y == my[i]) return 1; } return 0; } int main() { cin >> n >> m >> mx[0] >> my[0]; mx[1] = mx[0] - 2, my[1] = my[0] - 1; mx[2] = mx[0] - 2, my[2] = my[0] + 1; mx[3] = mx[0] - 1, my[3] = my[0] - 2; mx[4] = mx[0] - 1, my[4] = my[0] + 2; mx[5] = mx[0] + 2, my[5] = my[0] - 1; mx[6] = mx[0] + 2, my[6] = my[0] + 1; mx[7] = mx[0] + 1, my[7] = my[0] - 2; mx[8] = mx[0] + 1, my[8] = my[0] + 2; for (int i = 0; i <= n; i ++) { if (cheek( i, 0)) break; dp[i][0] = 1; } for (int i = 0; i <= m; i ++) { if (cheek( 0, i)) break; dp[0][i] = 1; } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (!cheek(i, j)) dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; } } cout << dp[n][m]; return 0; } ```
by sumlen @ 2023-10-05 08:49:19


@[modfish](/user/605226) 过了过了,我tm不开long long见祖宗了
by sumlen @ 2023-10-05 09:00:31


|