B. Marvolo Gaunt’s Ring

题目链接

大致题意:

给你三个数 p,q,r,然后给你给你一个有序的序列,让你在序列中跳出三个数i,j,k(i <=j<=k)使得 p*a[i]+q*a[j]+r*a[k] 最大,输出最大值


解题思路:

网上全是前缀后缀的思想,我的第一思路是递推,没想到AC了

状态表示:

f[pos][0]表示序列枚举到了第pos位,选择了第一个数a[i]后的最大值 p*a[i]

f[pos][1]表示序列枚举到了第pos位,选择了第二个数a[j]后的最大值(当然第一个已经选完) p*a[i]+q*a[j]

f[pos][2]表示序列枚举到了第pos位,选择了第三个数a[k]后的最大值(当然第一个和第二个已经选完) p*a[i]+q*a[j]+r*a[k]

分析:由于i,j,k可以相等,所以每种状态有两个情况转移得来,前i-1个序列当前状态的最大值,和第i位上一状态的最大值

转移方程:

f[i][0] = max(f[i - 1][0], p * a[i])
f[i][1] = max(f[i - 1][1], f[i][0] + q * a[i])
f[i][2] = max(f[i - 1][2], f[i][1] + r * a[i])

补充:因为有负值,初始化f数组为-3e18 (因为a[i]=1e9,q=-1e9 ,乘3就是-3e18 )


AC代码:

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 1; i <= (n); ++i)
#define debug(a) cout << #a << " = " << a << endl;
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const int N = 1e6 + 10;
int n, m, k;
ll a[N];
ll f[N][3];
int main(void)  //  dp
{ios::sync_with_stdio(0); cin.tie(0);ll p, q, r; cin >> n >> p >> q >> r;for (int i = 1; i <= n; ++i)cin >> a[i];for (int i = 0; i <= n; ++i) f[i][0] = f[i][1] = f[i][2] = -3000000000000000010;for (int i = 1; i <= n; ++i) {f[i][0] = max(f[i - 1][0], p * a[i]);f[i][1] = max(f[i - 1][1], f[i][0] + q * a[i]);f[i][2] = max(f[i - 1][2], f[i][1] + r * a[i]);}ll res = -3000000000000000010;for (int i = 1; i <= n; ++i)res = max(res, f[i][2]);cout << res << endl;return 0;
}

B. Marvolo Gaunt’s Ring (递推)相关推荐

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

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

  2. Marvolo Gaunt's Ring(类似于dp的做法)

    题目:(题目传送门) Professor Dumbledore is helping Harry destroy the Horcruxes. He went to Gaunt Shack as he ...

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

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

  4. Codeforces 855B - Marvolo Gaunt's Ring

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

  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

    题目描述 题目来源 思路梳理 最简单的方法莫过于枚举i,j,k,但肯定会超时.那么如何不枚举i,j,k呢,我们提前算出来.i,k在两边,当确定一个j时,a[j]*q的值是确定了,我们需要的是满足i&l ...

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

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

  8. CodeForces - 855B - Marvolo Gaunt's Ring(线段树 or DP)

    题目:CodeForces - 855B 题解: 1.用dp做的: dp[0][i]是前i个p*a[i]的最大值, dp[1][i]是在dp[0][i]的基础上加上q*a[i]的最大值,这样可以保证j ...

  9. 【ST】【CF855B】 Marvolo Gaunt's Ring

    传送门 Description 给定三个数 \(p~,~q~,~r~\),以及一个数组 \(a\), 找出三个数 \(i~,~j~,~k\) ,其中 \(i~\leq~j~\leq~k\) 最大化 \ ...

最新文章

  1. MySQL范围查找时,索引失效问题探究
  2. 深入理解C语言的函数调用过程
  3. 【算法】剑指 Offer 04. 二维数组中的查找 【重刷】
  4. 用栈实现中缀表达式求值
  5. JAVA输出希腊字母表
  6. 怎么在linux系统中输入日历,Linux命令行上如何使用日历详解
  7. Python中Oracle的连接、增删改查
  8. 新浪微博开发者创新基金开始接受申请
  9. Go语言mgo使用情况
  10. 为什么面试时面试官要问你有没有车贷,房贷和负债?
  11. 网页未连接到互联网,代理服务器出现问题
  12. C# Excel 为图表添加模拟运算表
  13. 推荐几个Sublime插件
  14. oracle索引的事
  15. R语言主成分分析PCA谱分解、奇异值分解预测分析运动员表现数据和降维可视化
  16. Android串口通讯,在线程里一直监听是否有消息发来,接收到消息到runOnUiThread处理跳转页面,页面跳转关闭之后,在发送消息尽然还会执行在打开页面?
  17. 解决html5语意标签在IE低版本浏览器下的兼容问题:
  18. SpringBoot - @EnableConfigurationProperties注解使用详解
  19. Linux 第三章 压缩与归档 文件搜索、排序
  20. 动手学深度学习课程笔记ch02

热门文章

  1. 一个服务器启动两个mysql实例
  2. nvidia nx平台GStreamer pipeline异常问题调试记录2
  3. 2013-2014 NBA 东西部决赛 + 总决赛合集
  4. 2021-2027全球及中国燃料电池驱动系统行业研究及十四五规划分析报告
  5. C陷阱与缺陷--笔记
  6. 计算机设备资产台帐,固定资产登记台帐.doc
  7. Laravel第三方登录开发之实现微博登录
  8. fseek() 函数
  9. 2021阳城一中高考成绩查询,山西高考分数线,晋城一中、阳城一中高考捷报这里都有...
  10. Dynamics 365 FO学习笔记