题目描述

有一个物品队列 \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);}}}}}

T293037 [传智杯 #5 练习赛] 白色旅人相关推荐

  1. 第五届“传智杯”全国大学生计算机大赛(练习赛)传智杯 #5 练习赛] 平等的交易

    [传智杯 #5 练习赛] 平等的交易 题目描述 你有 n n n 件道具可以买,其中第 i i i 件的价格为 a i a_i ai​. 你有 w w w 元钱.你仅能用钱购买其中的一件商道具.当然, ...

  2. 第三届“传智杯(练习赛)--E.儒略历

    题目链接:儒略历 模拟就行了,注意看好闰年的规则,已掉坑 #include<bits/stdc++.h> using namespace std; int s1[13]={0,31, 28 ...

  3. 第五届“传智杯”全国大学生计算机大赛(练习赛)传智杯 #5 练习赛] 前四题Python解答

    第一道题: 给定若干个字符串,不定数量,每行一个.有些字符串可能出现了多次. 如果读入一个字符串后,发现这个字符串以前被读入过,则这个字符串被称为前面相同的字符串的复读,这个字符串被称为复读字符串. ...

  4. T292113 [传智杯 #5 练习赛] 平等的交易

    吐槽一下: 是我理解能力太差劲了吗?这题当时做的时候真没读懂,整的跟阅读理解似的2333,个人感觉这题出的不好.. 言归正传: 这题思路很简单,就是想让你先拿你的钱,必须买一件,之后用这一件尽可能多的 ...

  5. T156527 直角三角形-传智杯(练习赛)

    题目描述 一个直角三角形的两个直角边是 a,b(a\le b)a,b(a≤b),其斜边是 cc,且 a,b,ca,b,c 都是正整数.现在我们已经知道了斜边长度 cc,请问这个直角三角形的两个直角边的 ...

  6. 第五届“传智杯”全国大学生计算机大赛(练习赛)

    前言:这次练习赛对应的洛谷原题分别是B3654.P8547.P8444.P8462.P8827.P5391.有需要的可以去洛谷找原题看题解弄懂自己不会的 官方给的:练习赛满分程序(多语言):云剪贴板 ...

  7. 答案解析(C语言版本)——第五届“传智杯”全国大学生计算机大赛(练习赛)

    目录 A [传智杯 #5 练习赛] 复读 输入输出样例 输入 #1 输出 #1 代码解析如下 B [传智杯 #5 练习赛] 时钟 输入输出样例 输入 #1 输出 #1 输入 #2 输出 #2 输入 # ...

  8. 洛谷随机刷题之传智杯#3

    [传智杯 #3 练习赛] 直角三角形 题目描述 一个直角三角形的两个直角边是 a , b ( a ≤ b ) a,b(a\le b) a,b(a≤b),其斜边是 c c c,且 a , b , c a ...

  9. 第五届“传智杯”全国大学生计算机大赛(练习赛)前四题题解

    第五届"传智杯"全国大学生计算机大赛(练习赛) 练习赛题单链接:传智杯练习赛 仅有会做的前四题题解,还是太弱了( ^ M ^ !!) 第一题 链接:复读 思路: 就是哈希表记录下出 ...

最新文章

  1. android 找不到类文件,Android Studio单元测试找不到类文件!
  2. 那些容易忽略的事(1) -变量与运算符+
  3. LVM和raid结合使用
  4. BigData之Hadoop:Hadoop的简介、深入理解、下载、案例应用之详细攻略
  5. C语言 memset()函数(内存初始化函数)
  6. std中稳定排序算法_敏哥:深挖亚马逊A9算法中的广告搜索排序
  7. Wannafly挑战赛17
  8. LeetCode 1017. 负二进制转换(负数进制转换)
  9. 基于Java+Jsp+SpringMVC漫威手办商城系统设计和实现
  10. 数据中心业务中断 多与运营流程有关
  11. python根据题库答案自动答题_直播答题助手 自动检测出题、搜索答案
  12. 计算机搜不到连接打印机主机,计算机找不到打印机设备?如果我无法连接怎么办?让我们看一下处理方法...
  13. 数据库笔试面试(第一版)——根据题目完成以下50道SQL语句
  14. lmp91000偏压配置求助
  15. 什么是网页源代码和网站的源代码
  16. java过滤关键字,敏感词汇
  17. Kubernetes(k8s)基础之二:容器编排介绍及概念
  18. 原生js、css分别实现提示框渐渐消失的效果
  19. 光剑读书思想录 2014.5.7
  20. 模拟通讯录系统2.0

热门文章

  1. round,floor与ceil函数,abs,real与imag函数
  2. 示波器1m和50欧姆示阻抗匹配_示波器的阻抗选择
  3. SQLI DUMB SERIES-8
  4. 移动端网页的基础制作
  5. Python自动化小米手环运动数据导出
  6. 微信小程序万里目_微信小程序“注册”你不知道的秘密
  7. 记录:如何解决Ubuntu20.04无法联网问题【亲测有效】
  8. Python:佛祖保佑
  9. 深入理解安卓异步任务AsyncTask
  10. Caused by: java.io.IOException: The temporary upload location [......] is not valid