2017-07-16
题目大意:
观察下面的数字金字塔。
写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
在上面的样例中,从7 到 3 到 8 到 7 到 5 (7-3-8-7-5)的路径产生了最大的和,也就是答案啦!
样例输入:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
样例输出:
30
题解:
这是一道dp题,我采用从底向上的方法,找到状态方程:a[i][j] += max( a[i+1][j] , a[i+1][j+1]);最后a[1][1]就是所要求的答案。数组从(1,1)开始就不用处理越界问题。
代码:
/*
ID:ljj19961
LANG:C++
PROG:numtri
*/
#include<iostream>
#include<fstream>
#include<algorithm>
#include<cmath>
using namespace std;
int num[1001][1001];
int n;
int main(){
ofstream cout("numtri.out");
ifstream cin("numtri.in");
cin >> n;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= i;j++){
cin >> num[i][j];
}
}
for(int i = n - 1;i > 0;i--){
for(int j = 1;j <= i;j++){
num[i][j] += max(num[i+1][j] , num[i+1][j+1]);
}
}
cout << num[1][1] << endl;
return 0;
}
本文介绍了如何解决USACO中的一道动态规划问题——寻找数字金字塔中和最大的路径。从底向上计算,利用状态转移方程a[i][j] = max(a[i+1][j], a[i+1][j+1]),最终得到的a[1][1]即为最大和。"
89140910,8257002,BagNet:ImageNet 分类新秀,超越 AlexNet 的非深度学习模型,"['人工智能', '计算机视觉', '深度学习模型', '图像分类', '可解释AI']
3860

被折叠的 条评论
为什么被折叠?



