2 solutions
-
2
这是一个dp板子题,可以百度dp或动态规划自行学习,要注意的点就是第一行和第一列的处理,因为只能向右向下,所以第一行和第一列每一格假如要走的步数只能由前一格推来,只有一个方向,状态转移方程比较好找,不懂的可以对照样例手推,并且要对数组初始化。
#include<bits/stdc++.h> using namespace std; const int N = 200; int dp[N][N],a[N][N]; int n,m; int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); memset(dp,0,sizeof dp); for(int i = 1;i <= n; ++i) { for(int j = 1;j <= m; ++j) { scanf("%d",&dp[i][j]); } } for(int i = 1;i <= n; ++i) dp[i][1] += dp[i-1][1]; for(int i = 1;i <= m; ++i) dp[1][i] += dp[1][i-1]; for(int i = 2;i <= n; ++i) { for(int j = 2;j <= m; ++j) { dp[i][j] += min(dp[i - 1][j],dp[i][j - 1]); } } printf("%d\n",dp[n][m]); } return 0; }
Information
- ID
- 154
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 46
- Accepted
- 18
- Uploaded By