C Mandarin Orange(贪心+思维)

传送门:C Mandarin Orange

考察算法:思维 + 贪心
  • 枚举数组中的每个数,其中对于任意一个数字,往两边找连续的大于等于这个数的个数,如果碰到小于这个数的数字就停下。
  • 可以证明,可以从小的数字往两边扩展到这个大的数字,而不需要大的数字向小的数字扩展。这样在枚举的同时记录一下最大值,最后就能得出答案。
#include <iostream>
#include <algorithm>
using namespace std;

int a[10010];
int main(){
	int n;
	cin >> n;
	for(int i = 1; i <= n; i ++)
		cin >> a[i];
	int sum = 0, maxn = 0;
	for(int i = 1; i <= n; i ++){
		int left = i, right = i;
		sum = a[i];
		while(left){
			left --;
			if(left == 0 || a[left] < a[i])
				break;
			sum += a[i];
		}
		while(right){
			right ++;
			if(right == n + 1 || a[right] < a[i])
				break;
			sum += a[i];
		}
		maxn = max(maxn, sum);
	}
	cout << maxn << endl;
	
	return 0;
}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页