【牛客7872 C变强的秘药】dp

变强的秘药

https://ac.nowcoder.com/acm/contest/7872/C

【牛客7872 C变强的秘药】dp

传送门

题意

给n个数,按这个n个数给出的顺序取数,每一次至少取k个数,每一次取数的==收益==是取的序列后三个数之积 - 前三个数之积。例如我本次取a[1]~a[10],我能得到的收益是a[10] * a[9] * a[8] - a[1] * a[2] * a[3]。求怎么取能获得最大收益?

题解

dp[i]代表以 i 为取的某一次的右端点时,答案的最大值是多少。那么我们求的就是dp[n],因为显而易见n一定是某一次取的右端点。
考虑这个答案是由几部分组成的
是由3部分组成的,首先第一部分是,这一部分是雷打不动的
那另外两部分就是与相对于的这一次的左端点会带来的收益以及dp[j-1]
由于第一部分是雷打不动的,所以想要让尽可能大,只能让这一部分尽可能大
也就是需要枚举一个左端点j,求出上式的最大值即可
由于n的数据范围是1e7,因此上述做法显然是的做法,优化一下就是,一边更新dp值,一边维护我们想要的这个最大值,即可优化成O(n)的

需要注意的是,我们转移时用到的就代表着是某一次取的右端点,又由于每一次至少取k个,所以,必须>k,所以必须才能开始维护我们想要的那个最大值,一开始维护值应该初始化为-a[1] * a[2] * a[3]

Code

/****************************
* Author : W.A.R            *
* Date : 2020-10-30-19:58   *
****************************/
/*
*/
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<string>
#include<set>
#define IOS ios::sync_with_stdio(false)
#define show(x) std:: cerr << #x << " = " << x << std::endl;
#define mem(a,x) memset(a,x,sizeof(a))
#define Rint register int
using namespace std;
typedef long long ll;
const int maxn=1e7+100;

ll dp[maxn],a[maxn];
int main(){
    int n,k;scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++){scanf("%lld",&a[i]);}
    ll res=-a[1]*a[2]*a[3];
    for(int i=k;i<=n;i++){
        if(i-k>=k)res=max(res,dp[i-k]-a[i-k+1]*a[i-k+2]*a[i-k+3]);
        dp[i]=res+a[i]*a[i-1]*a[i-2];
    }
    printf("%lld\n",dp[n]);
    return 0;
}
全部评论

相关推荐

时间线:&nbsp;1.4-1.5:&nbsp;boss&nbsp;牛客&nbsp;官网&nbsp;实习僧海投了两天,&nbsp;感觉确实没啥招人的啊,&nbsp;心里凉了一半.1.6:&nbsp;中午快手约面,&nbsp;下午字节hr飞书私聊约面,&nbsp;当时想着第一次面大厂感觉三个过一个一面就已经赢了.1.7:&nbsp;下午&nbsp;3点大厂处女面,&nbsp;哈哈面试官是重邮红岩的直接保送;&nbsp;5点快手一面,&nbsp;我说这个是我的第二次大厂面试,&nbsp;面试官问要是拿到字节和快手选择哪个,&nbsp;我说昨天看了一晚上快手百分百选快手哈哈哈.&nbsp;晚上5.30字节约二面,&nbsp;快手约二面,&nbsp;小红书约一面.1.8:&nbsp;下午2点快手二面,&nbsp;聊天面体验非常好(当天电话确认入职时间);&nbsp;4点字节二面这次不是校友了,&nbsp;然后有一个CSS实现switch效果的忘记属性咋写了,&nbsp;感觉危了;&nbsp;7.30&nbsp;问字节hr是不是挂了;&nbsp;9点开始小红书一面,&nbsp;难死我了,&nbsp;但我还是笑着面完了,&nbsp;然后卸载了小红书,&nbsp;但是过了一会会小红书hr约二面,&nbsp;遂下回来了字节约三面.1.9:&nbsp;下午2点字节三面,&nbsp;依旧聊天+算法,&nbsp;自己太菜了有一个写错了,&nbsp;面完感觉又危了;&nbsp;5点面小红书20min结束(offer审批);5.30又去问字节hr是不是挂了,&nbsp;hr小姐姐说干嘛用一个句式,&nbsp;我说手写题又又又没写出来😂,&nbsp;2min后约hr面;8.30&nbsp;快手offer总结,&nbsp;自己运气好遇到了好公司好部门好面试官,&nbsp;字节剪映&nbsp;快手电商&nbsp;小红书支付的面试体验都非常好,&nbsp;不会的题会带你一步一步思考,&nbsp;流程也非常快全部都是当天推进,&nbsp;小红书是以分钟为单位推进.&nbsp;&nbsp;面经以及细节等我慢慢整理,&nbsp;&nbsp;以及保佑所有的审批不要出问题,&nbsp;我是真怕最后全过了0offer😂bg:&nbsp;重邮&nbsp;大数据&nbsp;蓝山工作室&nbsp;一段非大厂实习
独角仙梦境:这是真👻了
找实习记录
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务