hiho第五周——数字三角形(动态规划)
题目链接:http://hihocoder.com/problemset/problem/1037
注意点
1、可以考虑把二维动态数组改成只用一个长度为N+1的一维动态数组,减少空间复杂度。
可执行代码
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
//ifstream cin("input.txt");
int N;
cin>>N;
//tri在每一行前面加一个0
int ** tri = new int*[N];
for(int i = 0; i < N;i++)
{
tri[i] = new int[i+2];
tri[i][0] = 0;
for(int j = 0;j<=i;j++)
cin>>tri[i][j+1];
}
show
//for(int i = 0;i<N;i++)
//{
// cout<<tri[i][0]<<" ";
// for(int j = 0;j<=i;j++)
// cout<<tri[i][j+1]<<" ";
// cout<<endl;
//}
//dynamic
for(int i = 1;i<N;i++)
{
for(int j = 1;j<=i;j++)
tri[i][j] += max(tri[i-1][j-1],tri[i-1][j]);
tri[i][i+1] += tri[i-1][i];
}
//找出最后一行中最大的一个数
int result = 0;
for(int i = 1;i<=N;i++)
result = max(result,tri[N-1][i]);
cout<<result<<endl;
//delete
for(int i = 0;i<N;i++)
delete[] tri[i];
delete[] tri;
return 0;
}