1 条题解

题解与来源题共享。已有题解默认通过;新增或编辑后需由来源域管理员审核。待审核、驳回题解仅作者和审核管理员可见。来源域:system

  • 0
    @ 2025-8-24 13:44:59

    O(N2)O(N^2) DP

    动态规划(DP):

    定义 dp[i][j]dp[i][j] 表示走了 ii 步后到达位置 jj 的方法数。

    初始状态:dp[0][M]=1dp[0][M] = 1( 00 步时位于初始位置 MM )。

    状态转移:

    如果当前位置 jj 是 11 (左边界),下一步只能走到 22 : dp[i+1][2]+=dp[i][1]dp[i+1][2] += dp[i][1]

    如果当前位置 jj 是 NN (右边界),下一步只能走到 N−1N-1 : dp[i+1][N−1]+=dp[i][N]dp[i+1][N-1] += dp[i][N]

    对于中间位置 jj ,下一步可以走到 j−1j-1 或 j+1j+1 :dp[i+1][j−1]+=dp[i][j],dp[i+1][j+1]+=dp[i][j]dp[i+1][j-1] += dp[i][j],dp[i+1][j+1] += dp[i][j]

    #include <bits/stdc++.h>
    using namespace std;
    const int mod = 1e9 + 7;
    int n, m, k, p;
    long long dp[1010][1010];
    int main() {
    	cin >> n >> m >> k >> p;
    	dp[0][m] = 1;
    	for (int i = 1; i <= k; i++) {
    		for (int j = 1; j <= n; j++) {
    			dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j + 1]) % mod;
    		}
    	}
    	cout << dp[k][p];
    	return 0;
    }
    
    
    • 1

    信息

    ID
    557
    时间
    1000ms
    内存
    256MiB
    难度
    普及
    标签
    递交数
    5
    已通过
    3
    上传者