牛客算法周周练1 Maximize The Beautiful Value(前缀和)

链接:https://ac.nowcoder.com/acm/contest/5086/A

题目描述

Today HH finds a non-decreasing sequence(a1,a2…an,ai≤ai+1), he thinks it’s not beautiful so he wants to make it beautiful.
To make it, HH will choose exactly one number and move it forward at least k steps(i.e. you can move ai to aj if k≤i−j), and then he defines the beautiful value F(n) as
HH asks you to calculate max(F(n))

输入描述:

The first line contains an positive integer T(1≤T≤10), represents there are T test cases.
For each test case:
The first line contains two positive integers n,k(1≤n≤105,1≤k<n),the length of the sequence ,the least steps you need to move.
The second line contains n integers a1,a2…an(1≤ai≤108) - the sequence.

输出描述:

For each test case, you should output the max F(n).

示例1

输入
3
5 3
1 1 3 4 5
5 2
1 1 3 4 5
5 1
1 1 3 4 5
输出
46
50
53

思路:

前缀和记录此结点及之前的美丽值,设把aj移动到ai移动后的美丽值==总美丽值 + ai至aj往后移动1格增加的美丽值 - aj往前移损失的美丽值。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e8+8;
ll a[maxn],f[maxn];
ll n,k,sum,ans;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		cin>>n>>k;
		sum=0;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
			f[i]=a[i]+f[i-1];
			sum+=a[i]*i;
		}
		ans=0;
		for(int i=k+1;i<=n;i++)
		{
			ans=max(ans,sum+f[i-1]-f[i-1-k]-a[i]*k);
		}
		cout<<ans<<endl;
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值