zoukankan      html  css  js  c++  java
  • [每日一题]:Maximize The Beautiful Value

    题目:

    样例:

    题目大意:

    给出一个单调不递减序列(只是说单调不递减哦),然后给一个 K ,可以使得数列中的一个数向前移动 K 步,
    其他的依次向后移动,最后使得 1 * a[1] + 2 * a[2] + 3 * a[3] + ..... + a[n] 最大(移动后)。
    

    析题得侃:

    刚开始看样例一位只要 将最后一位向前移动 K 步就 ok 了,交了一发,哈哈,wa 的可伶,
    其实这样是肯定不行的,试想这样一个样例: 1 1 1 1 2 2 
    K = 3,这样的话是满足单调不递减的,但是如果我们将最后一位向前移动 K 步的话,显然我们得到的值不是最大的。
    我们只需要将前面的 1 向前移动 K 步即可。
    

    考察点:

    贪心、前缀和、思维
    

    图解:

    Code:

    #include <cstdio>
    #include <string>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    const int maxn = 1e5 + 10;
    
    typedef long long LL;
    
    LL a[maxn];
    
    LL pre[maxn];
    
    LL res = 0,ans = 0;
    
    int t,n,k;
    
    int main(void) {
        scanf("%d",&t);
        while(t --) {
            res = 0,ans = 0;
            scanf("%d%d",&n,&k);
            for(int i = 1; i <= n; i ++) {
                scanf("%d",&a[i]);
                // 总和
                ans += a[i] * i;
                // 前缀和
                pre[i] = pre[i - 1] + a[i];
            }
            res = 0;
            for(int i = k + 1; i <= n; i ++) {
                // 每个 A【i】只能向前移动 K 步
                res = max(res,ans + (pre[i - 1] - pre[i - k - 1]) - a[i] * k);
            }
            printf("%lld
    ",res);
        }
        return 0;
        
    }
    

    客官留步:

    思维真的是个奇妙的东西。
    先看一下限制范围,猜一下大概会用到什么算法,通过题目去推测信息显得尤为重要,
    我们在做一个选择的时候应该想想会造成什么影响。
  • 相关阅读:
    HA分布式集群二hive配置
    win下写任务提交给集群
    win10下将spark的程序提交给远程集群中运行
    Scala快学笔记(三)
    Scala快学笔记(二)
    Scala快学笔记(一)
    统计学习方法 三 kNN
    统计学习方法 二 感知机
    fluent python(一)
    Codewar (1)
  • 原文地址:https://www.cnblogs.com/prjruckyone/p/12670264.html
Copyright © 2011-2022 走看看