您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: