【每周例题】蓝桥杯 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;
}

浙公网安备 33010602011771号