1 条题解

  • 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] = 100 步时位于初始位置 MM )。

    状态转移:

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

    如果当前位置 jjNN (右边界),下一步只能走到 N1N-1dp[i+1][N1]+=dp[i][N]dp[i+1][N-1] += dp[i][N]

    对于中间位置 jj ,下一步可以走到 j1j-1j+1j+1dp[i+1][j1]+=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
    难度
    10
    标签
    递交数
    5
    已通过
    3
    上传者