atcoder#DPX. Tower

Tower

题目描述

N N 個のブロックがあります。 ブロックには 1, 2, , N 1,\ 2,\ \ldots,\ N と番号が振られています。 各 i i (1  i  N 1\ \leq\ i\ \leq\ N ) について、ブロック i i の重さは wi w_i で、丈夫さは si s_i で、価値は vi v_i です。

太郎君は、N N 個のブロックのうち何個かを選び、それらを任意の順序で一列に積み重ね、塔を作ることにしました。 このとき、塔は次の条件を満たさなければなりません。

  • 塔に含まれる各ブロック i i について、ブロック i i より上に積まれたブロックの重さの総和は si s_i 以下である。

塔に含まれるブロックの価値の総和の最大値を求めてください。

输入格式

入力は以下の形式で標準入力から与えられる。

N N w1 w_1 s1 s_1 v1 v_1 w2 w_2 s2 s_2 v2 v_2 : : wN w_N sN s_N vN v_N

输出格式

塔に含まれるブロックの価値の総和の最大値を出力せよ。

题目大意

题目描述

你有 nn 个箱子,编号从 11nn,每个箱子有三个属性,以第 ii 个箱子为例,分别是重量 wiw_i,承重能力 sis_i,价值 viv_i

你想建一座塔,因此需要将一些箱子堆叠起来,但是每个箱子必须满足下面的条件:

  • 这个箱子上面的所有箱子重量和要小于等于这个箱子的承重能力。

定义一个塔的价值为它所用的所有箱子的价值和。

最大化这个塔的价值并输出它。

输入格式

第一行一个整数 nn,表示箱子数量。

接下来 nn 行,一行三个整数,用来描述这个箱子的三个属性 wi,si,viw_i,s_i,v_i

输出格式

一行一个整数,表示塔的最大价值。

数据范围

$n \le 10^3, 1 \le w_i, s_i \le 10^4, 1 \le v_i \le 10^9$。

3
2 2 20
2 1 30
3 1 40
50
4
1 2 10
3 1 10
2 4 10
1 6 10
40
5
1 10000 1000000000
1 10000 1000000000
1 10000 1000000000
1 10000 1000000000
1 10000 1000000000
5000000000
8
9 5 7
6 2 7
5 7 3
7 8 8
1 9 6
3 3 3
4 1 7
4 5 5
22

提示

制約

  • 入力はすべて整数である。
  • 1  N  103 1\ \leq\ N\ \leq\ 10^3
  • 1  wi, si  104 1\ \leq\ w_i,\ s_i\ \leq\ 10^4
  • 1  vi  109 1\ \leq\ v_i\ \leq\ 10^9

Sample Explanation 1

上から順にブロック 2, 1 2,\ 1 と積み重ねると、この塔は条件を満たします。 塔に含まれるブロックの価値の総和は 30 + 20 = 50 30\ +\ 20\ =\ 50 となります。

Sample Explanation 2

上から順にブロック 1, 2, 3, 4 1,\ 2,\ 3,\ 4 と積み重ねればよいです。

Sample Explanation 3

答えは 32-bit 整数型に収まらない場合があります。

Sample Explanation 4

例えば、上から順にブロック 5, 6, 8, 4 5,\ 6,\ 8,\ 4 と積み重ねればよいです。