2 条题解
-
0
这道题是一道入门dp题,我设计的状态是走到这个点的方案数。因为只能向右或向下走,所以说二维数组的第一行和第一列都是1,转移方程只能是走到他上面的点的方案数与走到左边的点的方案数之和。
dp[i][j]=dp[i][j-1]+dp[i-1][j]
题目中说要加取模,因此就变成了这样dp[i][j]=dp[i][j-1]%MOD+dp[i-1][j]%MOD
其中MOD
是1e9+7
。输出的时候也要记得取模。最后是AC代码:
#include <iostream> using namespace std; typedef long long ll; const int MOD=1e9+7; ll n,m,dp[1005][1005]; int main() { cin>>n>>m; for(ll i=1;i<=1005;i++) { dp[i][1]=1; dp[1][i]=1; } for(int i=2;i<=n;i++) { for(int j=2;j<=m;j++) { dp[i][j]=dp[i-1][j]%MOD+dp[i][j-1]%MOD; } } cout<<dp[n][m]%MOD<<endl; return 0; }
-
0
#include <bits/stdc++.h> using namespace std; int n,m; long long a[1010][1010]; const long long Mod=1e9+7; int main(){ cin>>n>>m; for (int i=1;i<=n;i++){ for (int j=1;j<=m;j++)a[i][j]=1; } for (int i=2;i<=n;i++){ for (int j=2;j<=m;j++)a[i][j]=a[i][j-1]%Mod+a[i-1][j]%Mod; } cout<<a[n][m]%Mod; return 0; }
- 1
信息
- ID
- 1063
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 78
- 已通过
- 13
- 上传者