#SZSY1010. 堆叠背包

堆叠背包

题目描述

有一个最大承重为 SS 的背包,以及 nn 件物品。背包最初为空,放入其中的物品从下到上堆叠。

第 ii 件物品有五个属性:放入时刻 iniin_i、取出时刻 outiout_i、重量 wiw_i、承重 sis_i 和价值 viv_i,其中 ini<outiin_i<out_i。

你可以选择不使用某件物品,此时得不到它的价值。对于选择使用的物品,必须在 iniin_i 时刻把它放在当前所有物品的最上方,并在 outiout_i 时刻将它取出;取出时,它必须位于最上方,随后获得价值 viv_i。

在任何时刻,背包中所有物品的总重量都不能超过 SS。对于背包中的每件物品 ii,位于它上方的所有物品的重量之和都不能超过 sis_i;这里不包含物品 ii 自身的重量。

同一时刻可以进行多次放入或取出操作,操作顺序由你决定。一个物品取出后立即离开背包,不再影响该时刻后续操作的承重。

求能够获得的最大价值之和。

输入格式

第一行包含两个整数 n,Sn,S。

接下来 nn 行,每行包含五个整数 ini,outi,wi,si,viin_i,out_i,w_i,s_i,v_i,依次描述一件物品。

输出格式

输出一个整数,表示能够获得的最大价值之和。

数据范围

对于所有数据,n≤500n\le 500,S≤1000S\le 1000,0≤ini<outi≤2n0\le in_i<out_i\le 2n,wi,si≤1000w_i,s_i\le 1000,vi≤106v_i\le 10^6。

任意两件不同物品的放入时刻和取出时刻不会同时相同。

子任务

编号 分值 缩减范围 附加限制
1 20 n≤10n \le 10 —
2 — 所有物品的 iniin_i 相同
3 60 —

样例 1

5 5
0 6 1 2 1
1 2 1 1 1
1 3 1 1 1
3 6 2 1 2
4 5 1 1 1
5

样例 1 说明

选择第 1,2,3,41,2,3,4 件物品。

在时刻 00 放入物品 11;时刻 11 先放入物品 33,再放入物品 22。此时物品 11 上方的总重量为 22,恰好达到其承重。

时刻 22 取出物品 22;时刻 33 先取出物品 33,再放入物品 44;时刻 66 先取出物品 44,再取出物品 11。总价值为 1+1+1+2=51+1+1+2=5。

该方案不选择物品 55:在时刻 44 再放入它,会使物品 11 上方的总重量变为 33,超过其承重 22。