洛谷P1002 [NOIP 2002 普及组] 过河卒(线性dp)(基础性思想)

题目来源:https://www.luogu.com.cn/problem/P1002

这道题的基础框架:
for (int i = 0; i <= n; i++) { for (int j = 0; j <= m; j++) { if (i == 0 && j == 0) continue; if (mp[i][j] == 1) { dp[i][j] = 0; continue; } dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; } }
为什么这样遍历成立? :卒只能向下、向右,而我们遍历是从上到下、从左到右。每碰到一个新点{i,j},它要么从上、要么从左转移过来,而遍历顺序来看,它的上位和左位的点一定在它之前已经处理过了。

进一步处理起始和边界
`dp[0][0] = 1;

        if (i == 0) { dp[i][j] = dp[i][j - 1]; continue; }
        if (j == 0) { dp[i][j] = dp[i - 1][j]; continue; }`

这里不处理的话dp[i-1][j]就会搞出来-1索引

最后有两个点没过,查找发现是没开long long,
!注意:dp如果是计数那么通常会结果很大,一定开long long

posted @ 2025-08-29 12:27  yubai111  阅读(13)  评论(0)    收藏  举报