小奇探险

文章目录

  • 题目
  • 题解
  • 代码实现

在这里插入图片描述

题目

小奇去遗迹探险,遗迹里有N个宝箱,有的装满了珠宝,有的装着废品。
小奇有地图,所以它知道每一个宝箱的价值,但是它不喜欢走回头路,所以要按顺序拿这N个宝箱中的若干个。

拿宝箱很累的。一开始小奇的体力是1 ,每得到一个宝箱之后,小奇得到的价值是体力x 宝箱的价值,之后它的体力就会变为原来的K倍 。

小奇不喜欢连续放过很多宝箱,所以任意一段长度为M的序列中,小奇一定要取走其中的一个宝箱。

现在小奇想知道它能得到的最大价值和。

输入格式
第一行,两个整数 N,M,表示的含义如题目中所述;
第二行,一个小数K ,表示的含义如题目中所述,最多4位小数;
第三行,N个整数,第i个整数表示第i个宝箱的价值。

输出格式
输出一行,一个实数,表示小奇能得到的最大价值和,四舍五入保留两位小数。

在这里插入图片描述

题解

特别水也特别板的一道题。。。。
每个人都会想到三维DP
DP[i][j][k]DP[i][j][k]DP[i][j][k]:表示第i个宝箱一定选,上一次选的宝箱为j,选了k个
在这里插入图片描述
通过数据范围,就已经扼杀了想开三维数组的心


那我就先舍弃k,假设没有这个k的限制来思考一下
因为开二维都会MLE,所以就死命也要把DP压成一维
DP[i]DP[i]DP[i]:表示第i个宝箱一定选,前面[1,i−1][1,i-1][1,i1]不管怎么选,反正要是合法的最大价值
转移方程式?
DP[i]=DP[j]+w[i](j∈[i−m,i−1])DP[i]=DP[j]+w[i](j∈[i-m,i-1])DP[i]=DP[j]+w[i](j[im,i1])
这就是一个滑动窗口的优化(单调队列)我要AC了!!!
在这里插入图片描述


但是因为有了k的限制,我们就要重新搞一下了
我们思考如果正着往后推,那么前面选了j个就会影响后面的价值
但是如果从后往前推,后面管他选了x个,对当前i的价值是没有影响的,
当前i的价值只被前面的选取决定
在这里插入图片描述
所以重新定义一下DP[i]DP[i]DP[i]
表示从n往1推,第i个宝箱必须选,且[i+1,j][i+1,j][i+1,j]的选取必须是合法的最大价值
转移方程式也就变了?
DP[i]=DP[j]+w[i](j∈[i+1,min(n+1,i+m)])DP[i]=DP[j]+w[i](j∈[i+1,min(n+1,i+m)])DP[i]=DP[j]+w[i](j[i+1,min(n+1,i+m)])
在这里插入图片描述


这里我只解释两个地方:
1:为什么要压一个n+1??
因为数据有可能在最后的[n,n−m+1)[n,n-m+1)[n,nm+1)全是负数,
而这个时候i距离n的距离又不到m
我就可以不选,这个时候就可以用DP[n+1]=0DP[n+1]=0DP[n+1]=0来处理

2:为什么可以取到i+m??
按我们的常规理解应该是[i+m−1,i][i+m-1,i][i+m1,i]
仔细想想,i是一定要取的,那么[i+m−1,i][i+m-1,i][i+m1,i]这个区间肯定是满足m的
但是[i+m,i−1][i+m,i-1][i+m,i1]也是可以满足m的,所以i+m也可能对i进行贡献

举例说明:
m = 2,i = 1,i + m = 3
1 2 3

i
[1,2]长度是m,其中有下标为1的宝藏被拿了
[2,3]长度也是m,所以下标为3的宝藏也应该被拿

代码实现

#include <cstdio>
#include <deque>
using namespace std;
#define MAXN 100005
deque < int > deq;
int n, m;
double k, result = -0x7f7f7f7f;
double w[MAXN], dp[MAXN];int main() {scanf ( "%d %d %lf", &n, &m, &k );for ( int i = 1;i <= n;i ++ )scanf ( "%lf", &w[i] );deq.push_back ( n + 1 );for ( int i = n;i >= 1;i -- ) {while ( ! deq.empty() && deq.front() > i + m )deq.pop_front();dp[i] = dp[deq.front()] * k + w[i];while ( ! deq.empty() && dp[deq.back()] <= dp[i] )deq.pop_back();deq.push_back ( i );}for ( int i = 1;i <= m;i ++ )result = max ( result, dp[i] );printf ( "%.2lf", result );return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8.14 模拟:字符串

文章目录前言收获考场复盘T1 wordlistT2 passwordT3 readtreeT4 bracket总结前言 290分 2010070100 又被KH爆碾了qwq T1签到题脑抽写挂了80分… &#xff08;就差这80啊…&#xff09;、 收获 学会了启发式合并 还有一个把字符串所有后缀放进trie树的比较字符串的技巧 考场…

基于Asp.Net Core打造轻量级内部服务治理RPC(二 远程服务设计)

紧接上一篇《基于Asp.Net Core打造轻量级内部服务治理RPC(一)》文章。本文主要讲解基于Asp.Net Core的远程服务设计和实现。在上一篇中讲过,服务提供者提供的服务实际上就是一个Controller&#xff0c;那么是否在该程序中&#xff0c;服务都按照Asp.Net Core 中的Web Api的方式…

[TJOI2008]彩灯

题目&#xff1a; Peter 女朋友的生日快到了&#xff0c;他亲自设计了一组彩灯&#xff0c;想给女朋友一个惊喜。已知一组彩灯是由一排 N个独立的灯泡构成的&#xff0c;并且有 MM 个开关控制它们。从数学的角度看&#xff0c;这一排彩灯的任何一个彩灯只有亮与不亮两个状态&a…

51nod1229-序列求和V2【数学,拉格朗日插值】

正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId1229 题目大意 给出n,k,rn,k,rn,k,r求 ∑i1nikri\sum_{i1}^ni^kr^ii1∑n​ikri 1≤T≤20,1≤n,r≤1018,1≤k≤20001\leq T\leq 20,1\leq n,r\leq 10^{18},1\leq k\leq 20001≤T≤20,1≤n,r≤1018,1≤k≤…

【做题记录】图论杂题

P1268 树的重量 $\texttt{solution}$ 算法&#xff1a;(贪心)\(\) 找规律 当 \(n2\) 时&#xff0c;显然答案就是 \(dis(1,2)\) 。 当 \(n3\) 时&#xff0c;答案&#xff1a; \[\dfrac{dis(1,3)dis(2,3)-dis(1,2)}{2} \]当 \(n\) 是任意的&#xff0c;第 \(n\) 条路径可以处于…

[NOIP 2009 提高组]最优贸易

勤劳的一更题目题解代码实现题目 C国有 n个大城市和 m 条道路&#xff0c;每条道路连接这n个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 m 条道路中有一部分为单向通行的道路&#xff0c;一部分为双向通行的道路&#xff0c;双向通行的道路在统计条数…

8.15模拟:图论

文章目录前言收获考场复盘T1 recoverT2 teamT3 planT4 seqpath总结至暗时刻 前言 60分 303000 … 已经不是被KH爆碾的问题 &#xff08;KH屹立不倒%%%&#xff09; 昨天祈祷不要挂80了 结果今天挂了160&#xff08;还不算那个背包的70&#xff09; qwq 加油吧 奇怪的教训又增加…

Azure Service Fabric Mesh:一个构建任务关键型微服务的平台

本文要点Azure Service Fabric Mesh&#xff08;目前处于预览阶段&#xff09;是一个完全托管的服务&#xff0c;它使你可以使用“无服务器”方法构建、部署和管理由运行在容器中的多语言服务组成的应用程序。Azure Service Fabric Mesh 通过使用 Envoy Proxy 构建的软件定义网…

【做题记录】人类智慧

CF741C Arpa’s overnight party and Mehrdad’s silent entering 描述&#xff1a;有 \(2n\) 个人坐在一张圆桌&#xff0c;第 \(1\) 个位置与第 \(n\) 个位置相邻。现在给他们分配 \(1\) 或 \(2\) 两种食物。要求任意相邻的三个人食物不完全相同。求是否有可行的分配方案。 转…

CF1039D-You Are Given a Tree【根号分治,贪心】

正题 题目链接:https://www.luogu.com.cn/problem/CF1039D 题目大意 给出nnn个点的一棵树&#xff0c;然后对于k∈[1,n]k\in[1,n]k∈[1,n]求每次使用一条长度为kkk的链覆盖树并且不能重复覆盖点时最大覆盖条数。 1≤n≤1051\leq n\leq 10^51≤n≤105 解题思路 先考虑暴力怎么…

P3265 [JLOI2015]装备购买

题目描述&#xff1a; 给N个整数向量&#xff0c;每个向量带权值&#xff0c;求权值和最小的线性基 题解&#xff1a; 按权值v从小->大排序&#xff0c;依次插入线性基。整数线性基的思想类似&#xff0c;只是此时“消去”不能直接xor完成&#xff0c;需要类似高斯消元一样…

模板:欧拉路

文章目录前言代码前言 就是欧拉路的板子 理解起来有亿点困难&#xff08;连大神学长都还没有完全理解…&#xff09; 不过背起来还是很好背的 请勿模仿 如果是无向图&#xff1a;开一个vis数组&#xff0c;走一条边时把它的反向边标记上即可 代码 #include<bits/stdc.h&g…

Surging1.0发布在即,.NET开发者们,你们还在等什么?

开源&#xff0c;是近三十年来互联网经久不衰的话题。它不仅仅是一种技术分享的形态&#xff0c;更是一种开放&#xff0c;包容&#xff0c;互利共赢的互联网精神。 不到30年前&#xff0c;大神林纳德托瓦兹&#xff0c;在赫尔辛基大学实验室里&#xff0c;开发出了第一个版本的…

[SDOI2016]排列计数 (错排数概念 + 递推公式【附带证明】)

辛勤二更题目题解错排数概念错排数递推公式及其证明代码实现这种题做的时候&#xff1a; 做完后&#xff1a;正常这就是生活&#xff0c;我们要学会习惯 题目 求有多少种长度为 n 的序列 A&#xff0c;满足以下条件&#xff1a; 1 ~ n 这 n 个数在序列中各出现了一次 若第 i …

长链剖分

将较长的链剖出来。 先来一道模板题 注意&#xff01;&#xff01;&#xff01; 【指针版长链剖分】循环遍历儿子们的答案时&#xff0c; for(int j0;j<len[ver[i]];j)... 而不是(因为申请了长度为 \(len\) 的数组&#xff01;&#xff01;) for(int j0;j<len[ver[i]];j)…

失配树(border树)

4和6没有border关系 举例子&#xff1a; 当i 3时&#xff0c;j fa[i-1] fa[2] 0 s[j1] s[1] a s[3] 所以把i 3点的父亲设为j1 1 P5829 [模板]失配树

魔方俱乐部

爆肝感动三更题目思路90分代码&#xff08;MLE&#xff09;题解代码实现题目 fateice 来到了魔方俱乐部旅行。 魔方俱乐部有N个分部&#xff0c;每个分部均有且仅有一个虫洞&#xff0c;但是这虫洞只能通往一个分部。 每个分部有一个 orzFang 价值&#xff0c;第i个分部的 or…

模板:最大匹配

文章目录前言代码前言 匈牙利算法 可以解决的问题&#xff1a; &#xff08;原谅我的偷懒&#xff09; &#xff08;原谅我的水文&#xff09; 代码 #include<bits/stdc.h> using namespace std; #define ll long long const int N3e5100; const int mod1e97; int n,…

P4700-[CEOI2011]Traffic【tarjan,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4700 题目大意 ABA\times BAB的网格上有nnn个点&#xff0c;然后mmm条有向/无向边连接成平面图&#xff0c;求最左边每个点能到达的最右边点的数量。 1≤A,B≤109,1≤n≤3105,1≤m≤91051\leq A,B\leq 10^9,1\leq n\leq 3\ti…

Stack Overflow 监控系统内部架构初探

Stack Exchange 架构主管 Nick Craver 在最近的一篇文章中介绍了他们的监控系统。他在文章中讨论了监控策略背后的理念和动机&#xff0c;并介绍了他们的工具集——主要是 Bosun、Grafana 和 Opserver。Stack Overflow 及其姐妹站点 Stack Exchange 运行在.NET 和 MS SQL Serve…