因为对内分工的原因,我的dp一直很弱,最近觉得dp非常有趣,于是开始狂刷dp了。
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; int dp[1051][1051]; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) dp[i][1]=1; for(int j=1;j<=m;j++) dp[1][j]=1; for(int i=2;i<=n;i++) for(int j=2;j<=m;j++) { if(i==n && j==m) { dp[i][j]=(dp[i-1][j]+dp[i][j-1])%10007; break; } else { dp[i][j]=(dp[i-1][j]+dp[i][j-1])%10007; } } cout << dp[n][m]%10007 <<endl; } return 0; }
已知一个帅哥(zlgg)要从学校走回家,地图是N*M的网格状,他的学校在左上角,家在右下角,但他只能向右或向下走,问:他有多少种不同的走法回家?
状态:dp[i][j]代表走到网格i*j时有多少种不同走法;
状态转移方程:dp[i][j]=dp[i-1][j]+dp[i][j-1];