题解
2023-05-07 15:45:31
发布于:广东
42阅读
0回复
0点赞
#include<iostream>
using namespace std;
int a[1005][1005];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)for(int j=1;j<=i;j++)cin>>a[i][j];//输入二维数组
for(int i=n-1;i>0;i--){//从倒数第二行开始
for(int j=1;j<=i;j++){
a[i][j]+=max(a[i+1][j],a[i+1][j+1]);//将下面两个数中较大的加进它们上面对应的数
}
}
cout<<a[1][1];//输出最上面的数
return 0;
}
比如说:
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
倒数第二行:
第一个2下面是4 5
5>4
2+=5
变为:
7
3 8
8 1 0
7 7 4 4
4 5 2 6 5
7下面是5 2
5>2
7+=5
变为:
7
3 8
8 1 0
7 12 4 4
4 5 2 6 5
以此类推
按以上操作从倒数第二行一直操作到第一行
最后第一行第一个即为答案
全部评论 1
dp动态规划
2023-05-07 来自 广东
1
有帮助,赞一个