【每周例题】蓝桥杯 C++ 最大花之能量

最大花之能量

题目

最大花之能量

 

题目分析

1.这道题涉及了动态规划,因为他需要记录上一个数的和得出的结果后,继续往后寻找有没有和更大的数符合题目要求,不然按照一般思路,这个题目得出的最大能量和为:3、5、9(17)

2.我们设计两个数组,数组a存储原本的数组的数,数组b存储每个位置上的数为结尾的最长递增子序列的和

3.我们采用双重for循环完成动态规划:

  • 对于每个数据i,它遍历之前的所有位置j(j < i),检查是否可以从j位置跳到i位置获得更长的递增子序列。
  • 如果可以(a[i]>a[j]),则更新b[i]为之前的b[i]和b[j]+a[i]中的较大值
int maxsum;  
for (int i = 1; i <= n; i++)  
{  
    for (int j = 1; j < i; j++)  
    {  
        if (a[i] > a[j])  
        {  
            b[i] = max(b[i], b[j] + a[i]);  
        }  
    }  
    maxsum = max(b[i], maxsum);  
}

代码

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin >> n;
    int a[1000], b[1000];
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        b[i] = a[i];
    }

    int maxsum;

    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j < i; j++)
        {
            if (a[i] > a[j])
            {
                b[i] = max(b[i], b[j] + a[i]);
            }
        }
        maxsum = max(b[i], maxsum);
    }
    cout << maxsum << endl;
    return 0;
}

  

posted @ 2024-04-08 16:35  山远尽成云  阅读(144)  评论(0)    收藏  举报