荣誉艾尔迪亚人的题解

目录

原题描述:

题目背景

题目描述

输入格式

输出格式

样例

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.mfbz.cn/a/335647.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ros2 基础教程-使用ROS 2进行相机标定

ROS 2进行相机标定&#xff08;Camera Calibration&#xff09; 相机&#xff08;摄像头&#xff09;是一种非常精密的光学仪器&#xff0c;对外界环境的感知非常敏感。由于摄像头内部和外部的一些原因&#xff0c;摄像头采集的图像常常会发生一定的畸变。如果直接将采集到的图…

【分布式技术】ELK大型日志收集分析系统

目录 步骤一&#xff1a;完成JAVA环境部署 步骤二&#xff1a;部署ES节点&#xff08;三台主机&#xff09; 步骤三&#xff1a;内核参数修改 步骤四&#xff1a;web端查看验证 步骤五&#xff1a;yum安装nginx 步骤六&#xff1a;完成logstash部署 步骤七&#xff1a;部…

matlab抽取与插值

什么是抽取&#xff1f; 我们假设一个数字信号 x ( n ) , n 1 , 2 , . . . , N x(n),n1,2,...,N x(n),n1,2,...,N共有 N N N个点&#xff0c;抽取就是每个几个点抽1个点&#xff0c;比如2倍抽取&#xff0c;那么抽取后的信号为 y ( n ) , y ( 1 ) x ( 1 ) , y ( 2 ) x ( 3 …

stm32 FOC 电机介绍

今年开始学习foc控制无刷电机&#xff0c;这几天把所学整理一下&#xff0c;记录一下知识内容。 前言: 为什么要学习FOC? 1.电机控制是自动化控制领域重要一环。 2.目前直流无刷电机应用越来越广泛&#xff0c;如无人机、机械臂、云台、仿生机器人等等。 需要什么基础&…

项目管理十大知识领域之风险管理

1. 项目风险管理的定义与概述 项目风险管理是指为了实现项目目标&#xff0c;有计划地识别、评估和应对项目中的各种风险的过程。项目风险管理的核心在于提前辨识到可能对项目目标产生不利影响的不确定因素&#xff0c;并采取适当的措施降低或消除这些风险&#xff0c;以保障项…

three.js从入门到精通系列教程005 - three.js使用鼠标拖拽缩放浏览全景图

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>three.js从入门到精通系列教程005 - three.js使用鼠标拖拽缩放浏览全景图</title><script src"ThreeJS/three.js"></script><script src&qu…

基于SpringBoot Vue博物馆管理系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

深入数仓离线数据同步:问题分析与优化措施

一、前言 在数据仓库领域&#xff0c;离线数仓和实时数仓是常见的两种架构类型。离线数仓一般通过定时任务在特定时间点&#xff08;通常是凌晨&#xff09;将业务数据同步到数据仓库中。这种方式适用于对数据实时性要求不高&#xff0c;更侧重于历史数据分析和报告生成的场景…

Spring第六天(注解开发第三方Bean)

注解开发管理第三方Bean 显然&#xff0c;我们无法在第三方Bean中写入诸如service这样的注解&#xff0c;所以&#xff0c;Spring为我们提供了Bean这一注解来让我们通过注解管理第三方Bean 第二种导入方式由于可读性太低&#xff0c;故只介绍第一种导入方式&#xff0c;这里我…

【JavaEE】线程安全的集合类

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

【ARM Cortex-M 系列 1.1 -- Cortex-M33 与 M4 差异 详细介绍】

请阅读【嵌入式开发学习必备专栏 之 Cortex-Mx 专栏】 文章目录 背景Cortex-M33 与 M4 差异Cortex-M33Cortex-M4关系和差异举例说明 背景 在移植 RT-Thread 到 瑞萨RA4M2&#xff08;Cortex-M33&#xff09;上时&#xff0c;遇到了hardfault 问题&#xff0c;最后使用了Cortex…

路由器结构

路由器是连接互联网的设备&#xff0c;本文主要描述路由器的结构组成。 如上所示&#xff0c;OSI&#xff08;Open System Interconnect&#xff09;开放系统互联参考模型是互联网架构的标准协议栈&#xff0c;由ISO标准组织制定。自底向上&#xff0c;互联网架构分为7层&#…

行政快递管理软件使用教程

勤勤恳恳的行政人员&#xff0c;还在努力地修改企业快递管理制度&#xff0c;而聪明的行政人员&#xff0c;已经开始物色合适的快递管理软件了。随着企业管理的现代化发展&#xff0c;我们会发现很多管理模块都有相应的管理制度。人力资源管理、客户关系管理、财务管理等等&…

Unity animator动画倒放的方法

在Unity中&#xff0c; 我们有时候不仅需要animator正放的效果&#xff0c;也需要倒放的效果。但我们在实际制作动画的时候可以只制作一个正放的动画&#xff0c;然后通过代码控制倒放。 实现方法其实很简单&#xff0c;只需要把animator动画的speed设置为-1即为倒放&#xff…

MySQL中SELECT字句的顺序以及具体使用

目录 1.SELECT字句及其顺序 2.使用方法举例 3.HAVING和WHERE 1.SELECT字句及其顺序 *下表来自于图灵程序设计丛书&#xff0c;数据库系列——《SQL必知必会》 2.使用方法举例 *题目来源于牛客网 题目描述 现在运营想要查看不同大学的用户平均发帖情况&#xff0c;并期望结…

纯命令行在Ubuntu中安装qemu的ubuntu虚拟机,成功备忘

信息总体还算完整&#xff0c;有个别软件更新了名字&#xff0c;所以在这备忘一下 1. 验证kvm是否支持 ________________________________________________________________ $ grep vmx /proc/cpuinfo __________________________________________________________________…

【大数据】了解 YARN 架构的基础知识

了解 YARN 架构的基础知识 1.为什么是 YARN2.YARN 简介3.YARN 的组成部分3.1 Resource Manager 资源管理器3.1.1 Scheduler 调度程序3.1.2 Application Manager 应用程序管理器 3.2 Node Manager 节点管理器3.3 Application Master 应用程序主控3.4 Container 容器 4.在 YARN 中…

数据库课程设计-图书管理系统数据库设计

目录 一、实验目的 二、实验内容 三、实验要求 四、实验设计 4.1需求分析 4.1.1系统目标 4.1.2功能需求 4.1.3性能需求 4.14界面需求 4.2概念模型设计 4.2.1 实体及联系 4.2.2 E-R图 4.3 逻辑设计 4.3.1 E-R模型向关系模型的转换 4.3.2 数据库逻辑结构 4.3.3数据库模型函数依赖…

【leetcode】回溯总结

本文内容来自于代码随想录https://www.programmercarl.com/ 思想 一棵树中的纵向遍历结束回到上一层的过程&#xff0c;比如&#xff1a; 这个过程通常回伴随恢复现场的过程。 模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本层集…

【实战】K8S部署Redis集群代理Predixy

文章目录 前言技术积累为什么要在redis集群前面加个predixy代理&#xff1f;这样做的好处有哪些&#xff1f;常用代理配置网络存储 实战构建predixy镜像并部署下载predixy源码编译构建镜像创建K8S配置文件predixy-configmap并执行网络储存PV与PVC部署predixy-deployment 测试代…
最新文章