Maximize The Beautiful Value

链接

 

T组样例

n个数和k(最少移动的次数)

非递减序列

求最少移动k步 F(N)最大的值

 

思路: 

非递减序列说明是递增的,也就是最开始的F(N)是最大的,现在移动了还要保证最大,也就是移动最少的步数,k步,求和自然要想到前缀和

be记录原始序列的和

sum[]记录前缀和

now 记录现在的

ans取最大值

注意数据范围

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e5 + 10;
int t,n,k,a[maxn],sum[maxn],be,ans;
signed main(){
    //freopen("in","r",stdin);
    ios::sync_with_stdio(0);
    cin >> t;
    while(t--){
        cin >> n >> k;
        be = 0;
        for(int i = 1; i <= n; i++) {
            cin >> a[i];
            sum[i] = sum[i - 1] + a[i];
            be += i * a[i];
        }
        ans = 0;
        for(int i = 1; i + k <= n; i++){
            int now = be + sum[i + k - 1] - sum[i - 1] - a[i + k] * k;
            ans = max(ans,now);
        }
        cout << ans << endl;
    }
    return 0;
}
View Code

 

posted @ 2020-04-07 20:49  Hazelxcf  阅读(154)  评论(0)    收藏  举报