牛客周赛 Round 49 C-嘤嘤不想买东西喵_ 题型:贪心 贡献法 难度:简单

47 阅读1分钟

C-嘤嘤不想买东西喵_牛客周赛 Round 49 (nowcoder.com)

思想

贪心思想,题目要求我们求最大连续区间和

因为a[i]在打完折扣之后可能是负值,这些负值对答案没有贡献,所以我们要把这些值置为0加入到答案当中,以确保它们对答案不会产生负贡献..

样例1

6  2
1 1 4 5 1 4

在打完折扣之后a数组变为了

-1 -1 2 3 -1 2

sum=0,sum+=a[0]=-1,此时这个-1 就对答案没有贡献,我们需要把它置为0,继续往下加和.

sum+=a[1]=-1,sum=0;

sum+=a[2]=2,sum+=a[3]=5,sum+=a[4]=4,sum+=a[5]=6

样例1答案就是6

#include<bits/stdc++.h>
#define int long long
using namespace std;
int sum;
const int N=1e5+10;
int a[N],maxn=-1e9+10;
signed main()
{
	int n,x;cin>>n>>x;
	
	for(int i=0;i<n;i++)
	{
	 cin>>a[i];
	 a[i]-=x;	
	} 
	
	for(int i=0;i<n;i++)
	{
		sum+=a[i];
		if(sum<0) sum=0;
		
		maxn=max(maxn,sum);
	}

    cout<<maxn<<endl;
	return 0;
}

这是去掉if(sum<0)sum=0的结果:

image.png

这个是没去掉的结果:

image.png

image.png image.png