51nod 1083 矩阵取数问题
2018-03-12 19:17
225 查看
原题链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1083
思路:基础DP, dp[i][j] = max(dp[i-1][j],dp[i][j-1])+a[i][j],另外这里可以优化下空间,因为dp[i][j]只会用到dp[i-1]的值,所以可以用滚动数组减少一维,又本题特殊的可以将就a数组进行dp
AC代码:#include<bits/stdc++.h>
using namespace std;
const int MAXN = 505;
long long a[MAXN][MAXN], n;
long long solve() {
for (int i = 1; i < n; i++) { a[0][i] += a[0][i - 1]; }
for (int i = 1; i < n; i++) { a[i][0] += a[i - 1][0]; }
for (int i = 1; i < n; i++) {
for (int j = 1; j < n; j++) {
a[i][j] += max(a[i - 1][j], a[i][j - 1]);
}
}
return a[n - 1][n - 1];
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%lld", &a[i][j]);
}
}
printf("%lld\n", solve());
return 0;
}
思路:基础DP, dp[i][j] = max(dp[i-1][j],dp[i][j-1])+a[i][j],另外这里可以优化下空间,因为dp[i][j]只会用到dp[i-1]的值,所以可以用滚动数组减少一维,又本题特殊的可以将就a数组进行dp
AC代码:#include<bits/stdc++.h>
using namespace std;
const int MAXN = 505;
long long a[MAXN][MAXN], n;
long long solve() {
for (int i = 1; i < n; i++) { a[0][i] += a[0][i - 1]; }
for (int i = 1; i < n; i++) { a[i][0] += a[i - 1][0]; }
for (int i = 1; i < n; i++) {
for (int j = 1; j < n; j++) {
a[i][j] += max(a[i - 1][j], a[i][j - 1]);
}
}
return a[n - 1][n - 1];
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%lld", &a[i][j]);
}
}
printf("%lld\n", solve());
return 0;
}
相关文章推荐
- 51Nod 1083 矩阵取数问题
- 【51Nod】-1083 矩阵取数问题(DP)
- 51Nod 1083 矩阵取数问题
- 1083 矩阵取数问题 分类: 51nod 2015-07-20 22:05 9人阅读 评
- 1083 矩阵取数问题 分类: 51nod 2015-07-20 22:05 9人阅读 评
- 51Nod 1083 矩阵取数问题(矩阵取数dp,基础题)
- 51Nod 1083 矩阵取数问题(基础DP)
- 51Nod 1083 矩阵取数问题 (DP)
- 51nod 1083 矩阵取数问题
- 51NOD 1083 矩阵取数问题
- 51nod 1083 矩阵取数问题
- 51nod--1083 矩阵取数问题
- 51nod 1083 矩阵取数问题
- 51nod 1083 矩阵取数问题
- 51nod 1083 矩阵取数问题
- 51NOD中的矩阵取数问题(1083,1084,1411)——动态规划,插头dp
- 51nod 1083 矩阵取数问题
- 51nod 1083 矩阵取数问题
- 51nod-1083 矩阵取数问题
- 【51Nod】1083 矩阵取数问题