数字三角形(简单)
1.标注:简单,动态规划,数字
2.输入输出描述
输入描述
输入的第一行包含一个整数 N (1≤N≤100),表示三角形的行数。
下面的 NN 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。
输出描述
输出一个整数,表示答案。
3.示例及限制
示例
输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出
27
运行限制
最大运行时间:1s
最大运行内存: 256M
思路:1.利用二维数组,将数塔的每个数编号:a[i][j] 第i行第j列
2. 利用二维数组,设定dp[i][j],使其成为到第i行第j列的最优解
#include<bits/stdc++.h>
using namespace std;
int main()
{
int c;
int a[150][150];
int dp[150][150];
cin>>c;
for(int i=0;i<c;i++)
{
for(int j=0;j<i+1;j++)
{
cin>>a[i][j];
}
}
dp[0][0]=a[0][0];
for(int i=1;i<c;i++)
{
for(int j=0;j<i+1;j++)
{
dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+a[i][j];
}
}
if(c%2==0)
{
cout<<max(dp[c-1][c/2],dp[c-1][c/2-1]);
}
else
{
cout<<dp[c-1][c/2];
}
cout<<endl;
// for(int i=0;i<c;i++) 测试使用
// {
// for(int j=0;j<i+1;j++)
// {
// cout<<dp[i][j]<<" ";
// }
// }
return 0;
}
补充:
dp[i][j]的初始化需要与a[i][j]同步 e.g. dp[0][0]=a[0][0]
当最优解出现问题或答案有误时,可以尝试输出dp和a进行测试