荣誉艾尔迪亚人的题解

目录

原题描述:

题目背景

题目描述

输入格式

输出格式

样例

Input 1

Output 1

Input 2

Output 2

数据范围:

样例解释

主要思路:

代码code:


原题描述:

时间限制: 1000ms

空间限制: 65536kb

题目背景


​ 艾尔迪亚人在与巨人的战斗中雷枪发挥了不可磨灭的作用,雷枪之所以能够发挥那么强的作用,是因为雷枪能够牢固的刺入巨人的身体内引爆。雷枪的核心威力来源自火药,而火药的原材料由硫磺、硝石与炭原材料制造而成的,而火药的原材料可以由矿洞产出。

题目描述


​小埋是一个艾尔迪亚矿工,挖矿对于小埋来说能获得财富和荣誉(因为要抗击巨人需要大量材料,艾尔迪亚高层要鼓励矿工们多采矿),荣誉值到达一定值可以成为荣誉艾尔迪亚人

​ 现在小埋挖矿既想获得一定的财富也想获得一定量的荣誉。假设我们已知小埋挖的那部分矿洞有 n 块矿石,并且已知这 n 块矿石的重量 a_1,a_2,...,a_n,对于每块矿石我们能够获得一些财富值和荣誉值,对于每块矿石的财富值和荣誉值设定如下。

  • 对于第i块矿石,它的财富值为前 i块矿石中以第 i 块矿石结尾的(非严格)递增序列长度最大值。(第i 块矿石为结尾矿石,就是必须选第i 块矿石为结尾)。
  • 对于第 i 块矿石,它的荣誉值为第 i 块到第 n 块矿石中以第 i  块矿石为起点的(非严格)递减序列长度最大值。(第i 块矿石为起点矿石,就是必须选第i 块矿石为起点)。

小埋想要在自己需要至少获得财富值为 m 荣誉值为 v的情况下,所挖出矿石总和的最小重量。

输入格式

​ 第一行输入一个整数 n ,表示矿石的数量。

​ 第二行 n 个整数a_1,a_2,...,a_n​ 分别表示每个矿石的重量。

​ 第三行输入m 和 v 表示我们需要至少获得的财富值和荣誉值。

输出格式

输出占一行,输出一个整数,表示​输出小埋能够在限定条件下,挖出矿石总和的最小重量。

样例

Input 1
5
1 2 2 3 5
5 5
Output 1
8
Input 2
5
1 2 3 2 1
3 4 
Output 2
3

数据范围:

对于所有测试数据有:0 \le n \le 10^5,0 \le m*v \le 10^3,1 \le a_i \le 10^9

样例解释

  • 对于样例1,我们可以选择前四个矿石[1,2,2,3]
    • 以第一个矿石为结尾的(非严格)递增序列为 [1],财富值为 1,以第一个矿石为开头的非严格递减序列为1,荣誉值为 1
    • 以第二个矿石为结尾的非严格递增序列为 [1,2],财富值为2,以第二个矿石为开头的非严格递减子序列为[2,2] ,荣誉值为 2
    • 以第三个矿石为结尾的非严格递增序列为 [1,2,2],财富值为3,以第三个矿石为开头的非严格递减子序列为[2] ,荣誉值为1
    • 以第四个矿石为结尾的非严格递增序列为[1,2,2,3],财富值为4,以第四个矿石为开头的非严格递减子序列为3,荣誉值为 1
    • 所以我们的财富值为 1+2+3+4 = 10,荣誉值为1+2+1+1 = 5,满足我们所需的至少获得财富值为 5,荣誉值为 5,并且所挖去的矿石总重量最小。
  • 对于样例2,我们可以选第二个矿石和第五个矿石,第二个矿石重量为 2,财富值为 2荣誉值为3,第五个矿石重量矿石重量为 1,财富值为 2,荣誉值为1,我们此时满足至少财富值3,且荣誉值为4 的情况,并且此时总重量最小为 3,或者我们也可以选择第一块矿石和第二块矿石。

主要思路:

很明显,是最长上升子序列问题+二维费用背包问题。

把第 i 块到第 n 块矿石中以第 i  块矿石为起点的(非严格)递减序列长度最大值。(第i 块矿石为起点矿石,就是必须选第i 块矿石为起点)这句话就理解成第i块矿石为结尾,第n块矿石为开头的最长上升子序列,接着后面就是二维费用背包。

但是最长上升子序列朴素版是O(n^2),这里会超时,所以得用二分优化成O(n \log_2^n)

代码code:

#include<bits/stdc++.h>
using namespace std;
long long tmp[100010],f[100010],f1[100010],a[100010];
long long n;
long long m,v;
long long dp[1010][1010];
int main()
{cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}cin>>m>>v;long long pos=1;tmp[1] = a[1];f[1] = 1;for(int i=2;i<=n;i++){long long l=1,r=pos;while(l<r){long long mid = (l+r+1)/2;if(tmp[mid]<=a[i]){l = mid;}else{r = mid-1;}}if(tmp[l]>a[i]){tmp[l] = a[i];f[i] = l;}else{if(l == pos){tmp[++pos] = a[i];f[i] = pos;}else{tmp[l+1] = a[i];f[i] = l+1;}}}//此时,f[i]就代表已第i个为结尾,第一个为开头的最长上升子序列pos=1;tmp[1] = a[n];f1[n] = 1;for(int i=n-1;i>=1;i--){long long l=1,r=pos;while(l<r){long long mid = (l+r+1)/2;if(tmp[mid]<=a[i]){l = mid;}else{r = mid-1;}}if(tmp[l]>a[i]){tmp[l] = a[i];f1[i] = l;}else{if(l == pos){tmp[++pos] = a[i];f1[i] = pos;}else{tmp[l+1] = a[i];f1[i] = l+1;}}}//同理memset(dp,0x3f,sizeof(dp));//dp初始化dp[0][0] = 0;for(int i=1;i<=n;i++){for(int j=m;j>=0;j--){for(int k=v;k>=0;k--){dp[j][k] = min(dp[j][k],dp[max(j-f[i],0LL)][max(k-f1[i],0LL)]+a[i]);//二维费用背包}}}cout<<dp[m][v];return 0;
}

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

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

相关文章

Python爬虫时被封IP,该怎么解决?四大动态IP平台测评

在使用 Python 进行爬虫时&#xff0c;很有可能因为一些异常行为被封 IP&#xff0c;这主要是因为一些爬虫时产生的异常行为导致的。 在曾经的一次数据爬取的时候&#xff0c;我尝试去爬取Google地图上面的商家联系方式和地址信息做营销&#xff0c;可是很不幸&#xff0c;还只…

从规则到神经网络:机器翻译技术的演化之路

文章目录 从规则到神经网络&#xff1a;机器翻译技术的演化之路一、概述1. 机器翻译的历史与发展2. 神经机器翻译的兴起3. 技术对现代社会的影响 二、机器翻译的核心技术1. 规则基础的机器翻译&#xff08;Rule-Based Machine Translation, RBMT&#xff09;2. 统计机器翻译&am…

【内存管理】flink内存管理(一):内存管理概述:flink主动管理内存原理、flink内存模型

文章目录 一.flink为什么自己管理内存1. 处理大数据时JVM内存管理的问题2. flink主动管理内存逻辑2.1. Flink内存管理方面2.2. 序列化、反序列化说明 3. Flink主动管理内存的好处 二. Flink内存模型1. 堆内存2. 非堆内存2.1. 托管内存2.2.直接内存2.3. JVM特定内存 本节从整体使…

Nginx重写功能location与rewrite

1. location 从功能看 rewrite 和 location 似乎有点像&#xff0c;都能实现跳转&#xff0c;主要区别在于 rewrite 是在同一域名内更改获取资源的路径&#xff0c;而 location 是对一类路径做控制访问或反向代理&#xff0c;还可以proxy_pass 到其他机器。 rewrite 对访问的…

书生·浦语大模型实战营-学习笔记4

XTuner 大模型单卡低成本微调实战 Finetune简介 常见的两种微调策略&#xff1a;增量预训练、指令跟随 指令跟随微调 数据是一问一答的形式 对话模板构建 每个开源模型使用的对话模板都不相同 指令微调原理&#xff1a; 由于只有答案部分是我们期望模型来进行回答的内容…

蓝桥杯-最少刷题数

&#x1f4d1;前言 本文主要是【算法】——最少刷题数的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&#x…

一文搞清楚Java中的包、类、接口

写在开头 包、类、接口、方法、变量、参数、代码块&#xff0c;这些都是构成Java程序的核心部分&#xff0c;即便最简单的一段代码里都至少要包含里面的三四个内容&#xff0c;这两天花点时间梳理了一下&#xff0c;理解又深刻了几分。 Java中的包 Java 定义了一种名字空间&…

Centos7系统没有tab补全功能

问题&#xff1a; 新安装的centos7系统在执行命令的时候&#xff0c;没有tab补全命令 解决&#xff1a; 1.安装epel源 yum install -y epel-release 2.安装 bash-completion&#xff0c; bash-completion-extras yum install -y bash-completion bash-completion-extras 3.查…

接口测试 02 -- JMeter入门到实战

前言 JM eter毕竟是做压测的工具&#xff0c;自动化这块还是有缺陷。 如果公司做一些简单的接口自动化&#xff0c;可以考虑使用JMeter快速完成&#xff0c;如果想做完善的接口自动化体系&#xff0c;建议还是基于Python来做。 为什么学习接口测试要先从JMeter开始&#xff1f;…

Python——字符串的基本操作

⼀、 创建 s1 lenovo s2 "QF" s3 """hello lenovo""" s4 hello 亮 s5 """hello shark """ s6 hello world ⼆、简单使⽤ 1.\ 转义符 testimony This shirt doesn\t fit me words hello \ns…

[Linux使用] 库依赖分析 LDD

查看程式运行所需的共享库,常用来解决程序因缺少某个库文件而不能运行的一些问题。 /opt/app/todeav1/test$ldd test libstdc.so.6 > /usr/lib64/libstdc.so.6 (0x00000039a7e00000) libm.so.6 > /lib64/libm.so.6 (0x0000003996400000) libgcc_s.so.1 > /lib64/libg…

json解析

1什么是json JSON(JavaScript Object Notation&#xff0c;JS对象简谱&#xff09;是一种轻量级的数据交换格式。它是基于ECMAScript&#xff08;欧洲计算机协会制定的js规范&#xff09;的一个子集&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰…

卡尔曼滤波增益推导

该文章主要是记录温习卡尔曼滤波算法理论时的一些理解&#xff0c;重点讲解卡尔曼增益的推导过程。其中忽略了部分基础知识和详细的推导过程&#xff0c;阅读该文章需要本身已具备卡尔曼滤波基础。文章内容摘取自网络博客的部分内容&#xff0c;因为原文章的逻辑不是很通顺&…

pandas中,DataFrame.sample 的理解:

DataFrame.sample 是 pandas 库中 DataFrame 对象的方法&#xff0c;用于从数据框中抽取随机样本。 DataFrame.sample(nNone, fracNone, replaceFalse, weightsNone, random_stateNone, axisNone)n&#xff08;int或None&#xff09;&#xff1a; 指定要抽取的样本数量。如果指…

NLP论文阅读记录 - 2021 | WOS 基于多头自注意力机制和指针网络的文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.问题定义和解决问题的假设问题定义解决问题的假设 三.本文方法3.1 总结为两阶段学习3.1.1 基础系统 3.2 重构文本摘要 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-帖子详情页实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

PiflowX组件-OracleCdc

OracleCdc组件 组件说明 Oracle CDC连接器允许从Oracle数据库读取快照数据和增量数据。 计算引擎 flink 组件分组 cdc 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子hostnameHostname“”无是Or…

解决一个mysql的更新属性长度问题

需求背景&#xff1a; 线上有一个 platform属性&#xff0c;原有长度为 varchar(10)&#xff0c;但是突然需要填入一个11位长度的值&#xff1b;而偏偏这个属性在线上100张表中有50张都存在&#xff0c;并且名字各式各样&#xff0c;庆幸都包含 platform&#xff1b;例如 platf…

JavaSE核心基础-方法-笔记

1.方法概述 将一些代码抽取出来&#xff0c;放到单独的代码块中&#xff0c;形成方法&#xff0c;可以反复调用。 2.方法的定义格式以及解释 格式&#xff1a; 修饰符 返回值类型 方法名 &#xff08;参数列表&#xff09;&#xff5b; //方法主…

非科班转码的秋招复盘:地理信息科学GIS专业到后端研发、软件开发

本文介绍地理信息科学&#xff08;GIS&#xff09;专业的2024届应届生&#xff0c;在研三上学期期间&#xff0c;寻找后端研发、软件开发等IT方向工作的非科班转码秋招情况。 首先&#xff0c;这篇文章一开始写于2023年年底&#xff0c;当时为了参加一个征文活动&#xff0c;所…