题目:CodeForces - 855B

题解:

1.用dp做的:

dp[0][i]是前i个p*a[i]的最大值,

dp[1][i]是在dp[0][i]的基础上加上q*a[i]的最大值,这样可以保证j>=i;

dp[2][i]是在dp[1][i]的基础上加上r*a[i]的最大值,这样可以保证k>=j;

2.用线段树做的:

枚举中间的j,当p>=0的时候,查询(1,i)的最大值乘p,小于0时,查询(I,N)的最小值乘P,r同理。这样得到的值一定是最大的。最后取所有结果的最大值即可。

代码1:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))const int N=1e5+5;
const ll _INF=-8e18;
ll dp[3][N];
int a[N];
int main()
{cin.tie(0);ll p,q,r,n;cin>>n>>p>>q>>r;for(int i=1;i<=n;i++)cin>>a[i];dp[0][0]=_INF;dp[1][0]=_INF;dp[2][0]=_INF;for(int i=1;i<=n;i++){dp[0][i]=max(dp[0][i-1],p*a[i]);dp[1][i]=max(dp[1][i-1],dp[0][i]+q*a[i]);dp[2][i]=max(dp[2][i-1],dp[1][i]+r*a[i]);}cout<<dp[2][n]<<endl;return 0;
}

代码2:

#include<cstdio>
#include<algorithm>
#include<iostream>
typedef long long ll;
using namespace std;
#define maxn 100000+100
#define INF 10000000000
ll ma[maxn<<2],mi[maxn<<2],a[maxn];
ll x;
void push(int rt)
{ma[rt]=max(ma[rt<<1],ma[rt<<1|1]);mi[rt]=min(mi[rt<<1],mi[rt<<1|1]);
}
void build(int l,int r,int rt)
{if(l==r){scanf("%I64d",&x);ma[rt]=x;mi[rt]=x;a[l]=x;return ;}int mid=(l+r)/2;build(l,mid,rt<<1);build(mid+1,r,rt<<1|1);push(rt);
}
ll querya(int l,int r,int rt,int L,int R)
{if(L<=l&&r<=R){return ma[rt];}ll m=-INF;int mid=(r+l)/2;if(L<=mid)m=max(querya(l,mid,rt<<1,L,R),m);if(R>mid)m=max(querya(mid+1,r,rt<<1|1,L,R),m);return m;
}
ll queryi(int l,int r,int rt,int L,int R)
{if(L<=l&&r<=R){return mi[rt];}ll m=INF;int mid=(r+l)/2;if(L<=mid)m=min(queryi(l,mid,rt<<1,L,R),m);if(R>mid)m=min(queryi(mid+1,r,rt<<1|1,L,R),m);return m;
}
typedef long long ll;
int main()
{ll n,p,q,r,ans=0,sum;scanf("%I64d%I64d%I64d%I64d",&n,&p,&q,&r);build(1,n,1);for(int i=1;i<=n;i++){ans=a[i]*q;if(p>=0)ans+=querya(1,n,1,1,i)*p;else ans+=queryi(1,n,1,1,i)*p;//cout<<ans<<"++++"<<a[i]<<endl;if(r>=0)ans+=querya(1,n,1,i,n)*r;else ans+=queryi(1,n,1,i,n)*r;// cout<<ans<<endl;if(i==1)sum=ans;sum=max(sum,ans);}printf("%I64d\n",sum);return 0;
}

CodeForces - 855B - Marvolo Gaunt's Ring(线段树 or DP)相关推荐

  1. Codeforces 855B - Marvolo Gaunt's Ring

    855B - Marvolo Gaunt's Ring 思路:①枚举a[j],a[i]和a[k]分别用前缀最小值最大值和后缀最小值和后缀最大值确定. ②dp,dp[i][j]表示到第j为止,前i+1个 ...

  2. codeforces 855-B. Marvolo Gaunt's Ring

    http://codeforces.com/problemset/problem/855/B 这个题一开始读错了没想到要按顺序之后看到这个就像枚举但是数据太大...emmm然后就有点蒙. 后来看了题解 ...

  3. codeforces 855-B. Marvolo Gaunt's Ring(背包问题)

    http://codeforces.com/problemset/problem/855/B 解题思路: 可以把p,q,r看成三个物品,当做背包问题处理. #include<iostream&g ...

  4. Codeforces.700E.Cool Slogans(后缀自动机 线段树合并 DP)

    题目链接 \(Description\) 给定一个字符串\(s[1]\).一个字符串序列\(s[\ ]\)满足\(s[i]\)至少在\(s[i-1]\)中出现过两次(\(i\geq 2\)).求最大的 ...

  5. Marvolo Gaunt's Ring CodeForces - 855B+线段树+维护区间最大值和最小值

    题目链接: Marvolo Gaunt's Ring CodeForces - 855B 题目大意: 给定一段序列:a1,a2,a3,--an, 给定三个数:p,q,r(注意数据范围,代码里ans=- ...

  6. Marvolo Gaunt's Ring ---CodeForces - 855B(思维题)

    题目链接:http://codeforces.com/problemset/problem/855/B Marvolo Gaunt's Ring Professor Dumbledore is hel ...

  7. Marvolo Gaunt's Ring 【CodeForces 855B】

    Marvolo Gaunt's Ring 求p * i + q * j + r * k(i<=j<=k)的最大值 虽然题中给的时间比较长但还是不可以用直接暴力用三次for循环,一定可以用一 ...

  8. Codeforces Round #343 (Div. 2) D. Babaei and Birthday Cake 线段树维护dp

    D. Babaei and Birthday Cake 题目连接: http://www.codeforces.com/contest/629/problem/D Description As you ...

  9. B. Marvolo Gaunt’s Ring (递推)

    B. Marvolo Gaunt's Ring 题目链接 大致题意: 给你三个数 p,q,r,然后给你给你一个有序的序列,让你在序列中跳出三个数i,j,k(i <=j<=k)使得 p*a[ ...

最新文章

  1. 疫情过后人工智能是否能迎来春天?
  2. 如何解决visual studio2017 install 下载安装极慢的问题
  3. Spring 的优秀工具类盘点---转
  4. hibernate处理懒加载异常的方法
  5. WCF消息之XmlDictionaryWriter
  6. 洛谷入门题P1046、P1047、P1427、P1428、P2141、P1567题解(Java语言描述)
  7. 开源飞控爱好者_开源爱好者的10种节日礼物创意
  8. 解析ajax数据显示到from表单中,jQuery Ajax从另一页上的Form请求中提取数据?
  9. 仅需 5 步,用 JavaScript 直接通过前端发送电子邮件
  10. (转)华为面试题算什么,这个背会了外企随便进
  11. Cefsharp入坑实操
  12. 2021年BATJ30套大厂Android经典高频面试题,附答案
  13. Matplotlib笔记(莫烦Python)
  14. 已知两点坐标求水平距离_知道两个点的坐标X,Y,如何计算出两点间的距离以及角度,公式是什么...
  15. 8uftp链接linux,8UFTP工具,FTP工具连接的办法,配置方式
  16. Python数据解析笔记+实战
  17. 一个虚拟摄像头Filter(Virtual Cam Capture Filter)
  18. 系统设计面试题之 怎么设计一个打分系统
  19. OSChina 周日乱弹 —— 这个野男人是谁
  20. 收藏!17 张程序员专属壁纸(使用频率很高)

热门文章

  1. 计算机学校教师培训方案,教师培训电脑多媒体实施方案
  2. Udacity机器人软件工程师课程笔记(十八)-机械臂仿真控制实例(其三)-KR210机械臂反向运动学
  3. 13星座性格购买iphone6s的搞笑反映
  4. 玛娜火花Mana Spark for Mac游戏介绍
  5. 《智能语音时代》的读书笔记
  6. 浅谈git rebase和git checkout --ours(theirs)
  7. hiho#1082 然而沼跃鱼早就看穿了一切
  8. 计算机初级培训教学大纲,计算机初级培训教学大纲(范文).doc
  9. 37岁985老兵,小公司朝九晚五,大龄底层没机会了!
  10. 3D模型欣赏:清纯美丽小姐姐