T293037 [传智杯 #5 练习赛] 白色旅人

news2024/11/30 4:58:51

题目描述

有一个物品队列 \frak BB,初始时为空。现在共有三种操作。每个操作会给定三个整数 \mathrm{op},x,yop,x,y,其中 \mathrm{op}op 表示操作种类,x,yx,y 是操作的参数。操作分为如下三种:

  • 11:向 \frak BB 尾部添加一个物品,它的体积为 xx,价值为 yy。
  • 22:把 \frak BB 尾部最后物品移除。保证此时最少有一个物品。
  • 33:有一个体积为 xx 的背包。用 \frak BB 内的物品填充它,每个物品最多用一次,询问最多能获得多大的价值。提示:当 \frak BB 为空时,相当于没有物品可用,答案就是 00。

对于操作 22 和 33,请忽略多余的参数。

本题强制在线。强制在线的方式请见输入格式。

输入格式

  • 第一行有两个正整数 n,m_{\max}n,mmax​,表示操作个数以及操作 33 提到的背包的体积的最大值。
  • 接下来 nn 行,每行给定三个整数 \mathrm{op},x',y'op,x′,y′。将 x',y'x′,y′ 分别异或上 \mathrm{lastans}lastans 得到该次询问真正的 x,yx,y。其中,\mathrm{lastans}lastans 是上一次操作 33 询问的结果。在第一次操作 33 前,\mathrm{lastans}=0lastans=0。

输出格式

  • 输出有若干行,表示每次 33 操作的结果。

输入输出样例

输入 #1复制

10 10
1 3 4
1 5 5
3 4 1
3 12 5
1 14 3
3 1 8
2 11 11
3 2 11
2 8 8
3 12 8

输出 #1复制

4
9
10
9
4

说明/提示

样例解释

解码后的输入数据为:

10 10
1 3 4
1 5 5
3 4 1
3 8 1
1 7 10
3 8 1
2 1 1
3 8 1
2 1 1
3 5 1

对于十次操作,物品序列的情况如下;

  • 加入体积为 33,价值为 44 的物品。物品序列为 \{(3,4)\}{(3,4)}。
  • 加入体积为 55,价值为 55 的物品。物品序列为 \{(3,4),(5,5)\}{(3,4),(5,5)}。
  • 查询体积为 44 的背包能装下的物品价值最大值。此时只能装第一个物品,于是答案为 44。
  • 查询体积为 88 的背包能装下的物品价值最大值。此时可把两个物品都装下,答案为 99。
  • 加入体积为 77,价值为 1010 的物品。物品序列为 \{(3,4),(5,5),(7,10)\}{(3,4),(5,5),(7,10)}。
  • 查询体积为 88 的背包能装下的物品价值最大值。此时直接装第三个物品获得的价值大于装下另外两个,于是答案为 1010。
  • 删除最后一个物品。此时物品序列为 \{(3,4),(5,5)\}{(3,4),(5,5)}。
  • 查询体积为 88 的背包能装下的物品价值最大值。此时可把两个物品都装下,答案为 99。
  • 删除最后一个物品。此时物品序列为 \{(3,4)\}{(3,4)}。
  • 查询体积为 55 的背包能装下的物品价值最大值。此时只有一个物品可装,答案为 44。

数据范围及约定

对于全部数据,1\le n\le 3\times 10^41≤n≤3×104,1\le m_{\max}\le 2\times 10^41≤mmax​≤2×104,1\le x, y\le 2\times 10^41≤x,y≤2×104。

首先来个内存不通过的代码:使用暴力dfs


import java.util.*;

import java.util.Scanner;

public class Main {
	
	public static Integer n;
	public static Integer max;
	public static Integer x[];
	public static Integer y[];
	public static Integer op[];
	public static Integer zt[];
	public static Integer num = 0;
	public static Integer lastans = 0;
	public static List<Integer> listx = new ArrayList<>();
	public static List<Integer> listy = new ArrayList<>();
	
	public static void main(String[] args) {
		
		Scanner sca = new Scanner(System.in);
		n = sca.nextInt();
		max = sca.nextInt();
		x = new Integer[n];
		y = new Integer[n];
		op = new Integer[n];
		zt = new Integer[n];
		for(int i = 0;i<n;i++) {
			op[i] = sca.nextInt();
			x[i] = sca.nextInt();
			y[i] = sca.nextInt();
			zt[i] = 0;
		}
		
//		解码数据
		
		for(int i = 0;i<n;i++) {
			x[i] = x[i]^lastans;
			y[i] = y[i]^lastans;
//			System.out.println(x[i]+" "+y[i]+"");
			if(op[i]==1) {
				listx.add(x[i]);
				listy.add(y[i]);
			}else if (op[i]==2) {
				if(listx.size()>1) {
					listx.remove(listx.size()-1);
					listy.remove(listy.size()-1);
				}
			}else if (op[i]==3) {
//				搜寻最大的价值
				dfs(x[i],0);
				System.out.println(num);
				lastans = num;
				num = 0;
//				System.out.println(maxs);
			}
			
//			System.out.println(x[i]+","+y[i]+" :"+listx+" "+listy);
		}
		
	}
//	剩余当前背包mx 4 当前背包内价值my 第几个物品的索引index 
	public static int dfs(Integer mx,Integer my) {
		if(listx.size()==0) {
			return 0;
		}
		for(int i = 0;i<listx.size();i++) {
			if(zt[i]==0) {//如果这个没在包内
//				System.out.println("zt.get(i):"+zt[i]);
				if(mx>=listx.get(i)) {//这个包是否能装下该物品
					mx = mx-listx.get(i);//剩余容量
					my = my+listy.get(i);//当前价值
					if(my>num) {//存储最大的有效价值
						num = my;
					}
					zt[i]=1;
//					进行下一个搜索
					dfs(mx, my);
					mx = mx+listx.get(i);//剩余容量
					my = my-listy.get(i);//当前价值
					zt[i]=0;
				}else {
					zt[i] = 1;
//					进行下一个搜索
					dfs(mx, my);
					zt[i] = 0;
				}
			}
		}
		return 0;
	}

}

对代码进行优化 ,不会了...

 


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import java.util.*;

public class Main {
	
	public static List<Integer> listx = new ArrayList<>(),listy = new ArrayList<>();//存放大小 价值
	
	public static int dp[][],dp1[],dp2[],m;
	
	public static void main(String[] args)  throws IOException {
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		int lastans = 0;
	    String s = reader.readLine();
	    int n = Integer.parseInt(s.split(" ")[0]);//一共几行
	    int max = Integer.parseInt(s.split(" ")[1]);//背包体积最大值
	    int ma = 0;
	    dp1 = new int[max+1];
	    dp2 = new int[max+1];
	    for(int i=0;i<n;i++) {
	    	String s1 = reader.readLine();
			int op = Integer.parseInt(s1.split(" ")[0]);//编号类型
			int x = Integer.parseInt(s1.split(" ")[1]);//空间
			int y = Integer.parseInt(s1.split(" ")[2]);//价值
			x = x^lastans;
			y = y^lastans;
			
			if(op==3) {
				lastans = dp1[x];
				System.out.println(dp1[x]);
			}else if(op==1){
				for(int j = max;j>=x;j--) {
					dp1[j] = Math.max(dp1[j], dp1[j-x]+y);
				}
			}else if(op==2){
				for(int j = max;j>=x;j--) {
					dp1[j] = Math.min(dp1[j], dp1[j-x]-y);
				}
			}


			
	    }
	}
	
	
}

 

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

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

相关文章

React 简书项目实战【3】实现搜索框动画

React 简书项目实战【3】实现搜索框动画 添加判断变量 header/index.js 核心代码 ... class Header extends Component {constructor(props) {super(props);this.state {focused: true}}render() { ...添加classname header/index.js 核心代码 搜索框和放大镜图标 <…

手把手教你如何用界面组件DevExpress WPF应用一个模板主题

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 DevExpress WPF组件包…

VR失重太空舱游乐设备|航空航天VR体验|VR航天航空体验馆

普乐蛙推出了十几种不同类型的VR航天航空体验设备&#xff0c;VR创意内容丰富好玩&#xff0c;360全景还原航空各个场景&#xff0c;体验享受航空中的失重、飞行、旋转等刺 激与乐趣;模拟月球、太空、空间站等丰富航天场景&#xff0c;近距离体验航天科幻十足的魅力;通过沉浸式…

vue(移动端)使用高德地图实现精准定位

目录 效果图 前提准备 代码展示 效果图 两个页面 页面一&#xff08;粗略定位&#xff09; 点击城市进入页面二 &#xff08;粗略定位&#xff09;&#xff0c;搜索框输入具体位置&#xff08;以大连理工大学为例&#xff09; 点击大连理工大学&#xff0c;回到页面一&…

[附源码]java毕业设计校园淘宝节系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

MongoDB Journaling工作原理

文章目录 小结当 mongod 进程启动后,首先将数据文件映射到 shared 视图中,假如数据文件的大小为 4000 个字节,它会将此大小的数据文件映射到内存中,地址可能为 1000000~1004000。如果直接读取地址为1000060的内存,我们将得到数据文件中第60个字节处的内容。有一点要注意,…

ElementUI的Form表单使用slot-scope=“scope“获取当前表格行数据实现数据回显、修改表单操作

在写项目时&#xff0c;老师通过向后端发请求获得表格原来的数据来填充修改表单里的数据。 这是表格&#xff1a; 这是点击修改按钮后显示出来的修改表单&#xff1a; 但本地里都已经有这些数据了&#xff0c;就没必要再发一次请求&#xff0c;徒增服务器压力。 准备 可是…

Java基础之《netty(3)—NIO之Buffer》

一、Buffer基本介绍 1、缓冲区&#xff08;Buffer&#xff09; 缓冲区本质上是一个可以读写数据的内存块&#xff0c;可以理解成是一个容器对象&#xff08;数组&#xff09;。该对象提供了一组方法&#xff0c;可以更轻松的使用内存块。缓冲区对象内置了一些机制&#xff0c;…

黑盒子问题

一 问题描述 黑盒子代表一个原始数据库&#xff0c;存储一个整数数组和一个特殊的 i 变量。最初的时刻&#xff0c;黑盒子是空的&#xff0c;i0&#xff0c;黑盒子处理一系列命令&#xff08;事务&#xff09;。有两种类型的事务。 ① ADD(x)&#xff0c;将元素 x 放入黑盒子…

按用户导出数据到asm磁盘组,并复制到另一个集群的asm

1.创建asm导出数据目录 sql>select name,total_mb,free_mb from v$asm_diskgroup; 确认集群asm磁盘组环境 asmcmd>cd DGDSDB asmcmd>mkdir dpbak asmcmd>ls -l sql>conn / as sysdba create directory expdp_asm_dir as DGDSDB/dpbak; create directory expdp_l…

堆-c语言实现

1. 树是什么&#xff1f; 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合 注意&#xff1a;根结点没有前驱结点&#xff1b;每棵子树的跟结点有且只有一个前驱结点&#xff0c;可能有0个或者多个后继结点&am…

数学建模学习(108):帮助小白快速实现批量机器学习建模训练和批量的数据可视化

本文主要针对机器学习知识薄弱,不太擅长搭建模型同学使用。 本文主要是讲解可以快速轻松实现可视化、数据预处理、批量模型构建。帮助大家轻松做到可视化和建模。特别是机器学习不扎实同学。 数据科学模型开发管道涉及各种组件,包括数据收集、数据处理、探索性数据分析、建模…

unity il2cpp打包安卓打包崩溃原因Unity2020.3 il2cpp.so丢失

Unity2020.3 il2cpp.so 问题&#xff1a;升级unity2020.3后&#xff0c;使用il2cpp方式打Android包&#xff0c;在手机上启动会崩溃&#xff0c;追查崩溃原因是il2cpp.so not found。 解决过程&#xff1a; il2cpp.so没有&#xff1f;一脸懵逼&#xff01;记得以前在调用Bui…

面试八股 | 计算机网络 | TCP三次握手

CP三次握手和四次挥手是面试题的热门考点&#xff0c;它们分别对应TCP的连接和释放过程&#xff0c;今天我们先来认识一下TCP三次握手过程&#xff0c;以及是否可以使用“两报文握手”建立连接。1、TCP是什么&#xff1f; TCP是面向连接的协议&#xff0c;它基于运输连接来传送…

【附源码】计算机毕业设计JAVA养老机构系统

【附源码】计算机毕业设计JAVA养老机构系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA mybati…

国际物流和跨境电商物流的区别

跨境物流是将货物通过海、陆、空运输从一个国家运输到另一个国家或地区&#xff0c;最终完成交易的目的。国际物流是实现两地对物资进行物理移动的一项国际商品交易或交流活动&#xff0c;从而完成国际商品交易的终目的。二者说法不同而已&#xff0c;本质上两者并没有太大的区…

APAUNet

Title:APAUNet: Axis Projection Attention UNet for Small Target in 3D Medical Segmentation 摘要&#xff1a; 在医学分割中&#xff0c;小目标分割对于诊断至关重要。在本文提出了轴向投影注意力网络&#xff0c;用于三维医学图像分割&#xff0c;特别是小目标。考虑到背…

什么是PCB中的光学定位点,不加可不可以?

什么是PCB中的光学定位点&#xff0c;不加可不可以&#xff1f; 这个问题在我平时的教学答疑出现的频次非常高&#xff0c;很多新手在初次接触这个概念的时候往往分不清楚这个光学定位点作用什么&#xff1f;从而导致他根本不知道什么时候该加&#xff0c;什么时候不加。 今天我…

物流通知:您的快递即刻送达!

“双11”购物狂欢节刚刚过去 “双12”马上就要到啦&#xff01; 回想双11期间 隔日达、次日达的快递 让买买买的快乐直接翻倍 也大大提升了消费者们 双12的再消费欲望 飞奔的物流背后有什么秘密武器&#xff1f; 来跟着小翼一探究竟&#xff01; 物流行业的飞速发展给…

Android App开发之利用JNI实现加密和解密操作实战(附源码 简单易懂)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一、JNI实现加密和解密 在实际开发中 JNI主要应用于以下场景 1&#xff1a;对关键业务数据进行加密和解密 Java代码容易遭到破解&#xff0c;JNI加密更加安全 2&#xff1a;底层的网络操作与设备操作 Java作为一门高级…