最大花之能量(蓝桥杯)

最大花之能量

问题描述

在一个神奇的王国里,有一个美丽的花园,里面生长着各种奇妙的花朵。这些花朵都有一个特殊的能力,它们能够释放出一种叫做「花之能量」的神秘力量。每朵花的花之能量都不同,它们的能量值用整数表示。

花园里住着四个好朋友:小兰、坤坤、妮妮和依依。他们都非常喜欢花园里的花朵,尤其是那些能量值特别高的花朵。他们认为,只要他们能够找到一种特殊的方法,就可以从花园里的花朵中获得最大的花之能量。

给定花园中的花朵能量序列 (a1,a2 ,…,aN),你需要帮助他们找到一种方法,使得他们能够获得最大的花之能量。这种方法是这样的:从序列中选择一些花朵,组成一个新的序列(ai1 ,ai2 ,…,aiK),其中 1≤i1 <i2<…<iK ≤N,并且这个新序列是一个严格递增序列。

他们的目标是求出这种方法中能够获得的最大花之能量的总和。

你需要编写一个程序,根据给定的花朵能量序列,计算出他们能够获得的最大花之能量的总和。

输入格式
输入的第一行是序列的长度 N。

第二行给出序列中的 N 个整数 a1 ,a2 ,a3 ⋯an ,表示花朵的能量值。

数据范围保证:1≤N≤103,1≤ai ≤104

输出格式
输出一个整数,表示他们能够获得的最大花之能量的总和。

样例输入

7
8 3 5 9 4 6 7

样例输出

21

动态规划

#include<bits/stdc++.h> // 引入常用的头文件,包含STL库等
using namespace std;   // 使用标准命名空间

int a[1010],dp[1010]; // 声明两个数组a和dp,大小为1010,a存储花之能量,dp存储状态转移过程中的最大和

int main() // 程序的主函数
{
    int n;  // 声明整数变量n,用于保存花朵的总数
    cin >> n; // 从标准输入读取花朵总数
    int res = 0; // 声明整数变量res并初始化为0,用于记录最大花之能量的总和

    // 输入花之能量序列
    for(int i = 1; i <= n; i++) // 从1遍历到n,读取每朵花的能量
        cin >> a[i]; // 从标准输入读取每朵花的花之能量并存储在数组a中

    // 计算最大花之能量的和
    for(int i = 1; i <= n; i++) // 主循环,从1遍历到n,以计算到第i朵花为止的最大花之能量和
    {
        dp[i] = a[i]; // 初始化dp[i]为a[i],表示最小的上升子序列可以只包含自己
        for(int j = 1; j < i; j++) // 从1遍历到i-1,寻找所有可能的子序列的前一个花朵
        {
            if(a[j] < a[i]) // 如果a[j]的能量值小于a[i]的能量值,说明可以形成一个上升子序列
                dp[i] = max(dp[i], dp[j] + a[i]); // 更新dp[i]为dp[j]+a[i]和dp[i]中较大的值,实现状态转移
        }
        res = max(res, dp[i]); // 更新res为res和dp[i]中较大的值,即到目前为止的最大花之能量
    }

    cout << res; // 输出最终的最大花之能量
    return 0; // 主函数返回0,正常结束程序
}

这段代码实现了一个经典的动态规划问题,用于求解最长递增子序列的和。

  • dp[i]存储了以a[i]为结尾的最长递增子序列的和。
  • 外部循环用于遍历所有花朵。
  • 内部循环用于找到所有小于当前花朵能量值的花朵,并尝试更新dp[i]
  • res变量用于在每次迭代之后保存到目前为止找到的最大和,最后输出该值。
  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

命运从未公平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值