P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles(洛谷)

原题传送门

在这里插入图片描述
在这里插入图片描述
思路:动态规划求最优解题,此题采用逆向解法比较容易。先定义一个变量和一个数组分别存放行数以及输入的各行的数,然后从数组的倒数第二行开始从下往上的每一行中的每个元素分别去选择一个最优解(从左下方和右下方中选择较大的一个),然后累加到当前元素中,以此类推,最后输出最顶端的元素即可

代码参考

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1001;
int r,a[MAXN][MAXN];  //r为行数,数组存储每行的数
int main()
{
	cin>>r;
	//给数组赋值
	for(int i = 0;i < r;i++)
        for(int j = 0;j <= i;j++)
            cin>>a[i][j];
    //从倒数第二行开始从下往上寻找每个最优解
	for(int i = r-2;i >= 0;i--)
 		for(int j = 0;j <= i;j++)
            a[i][j]+=max(a[i+1][j],a[i+1][j+1]); //将左下方和右下方中较大的一个加到当前元素
    cout<<a[0][0]<<endl;
    return 0;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值