Module: 动态规划中的模式


Problem

6 /7


跨地区奥林匹克竞赛

Problem

在跨地区机器人编程奥林匹克竞赛中,比赛以一种不寻常的形式进行。任务按顺序分配给参与者,而不是全部在回合开始时,每个第 i 个任务 (1 ≤ i ≤ n) 在其时间 si。收到下一个任务后,每个参与者必须立即决定是否解决它。如果他选择解决这个问题,那么他有ti分钟的时间来提交其解决方案进行验证,在此期间他不能转而解决另一个问题。如果参与者拒绝解决这个问题,那么他以后就不能再回到这个问题上了。当分配给参与者正在解决的任务的时间结束时,他可以开始解决同时可用的另一个任务,如果有这样的任务,或者等待另一个任务出现。同时,对于第 i 个问题的正确解决方案,参与者获得 ci 分。

在跨区域奥林匹克竞赛中代表区域人工智能中心之一的阿图尔明白,不仅是解决问题的能力,而且对哪些问题需要解决、哪些问题应该跳过的正确战略计算,在这样的奥林匹克运动会。他和所有参与者一样,在巡回演出开始之前就知道每项任务将在什么时间点可用,将为其解决方案分配多少时间以及解决它可以获得多少分。 Artur 是一位才华横溢的学生,因此他能够在规定的时间内成功解决他在奥林匹克竞赛中选择解决的任何问题并通过验证。

要求编写一个程序,确定亚瑟在他将要解决的问题的最佳选择下可以获得的最大分数,以及此类问题的数量和列表。

输入
第一行包含一个整数 n (1 ≤ n ≤ 105) 奥林匹克竞赛中的问题数。

接下来的 n 行包含问题的描述,每行三个数字:si 第 i 个问题出现的时间(以分钟为单位),ti 分配给它的解决方案的时间(以分钟为单位),以及 ci 有多少参与者将因解决此问题而获得的积分 (1 ≤ si, ti, ci ≤ 109< /sup>).

印记
第一行 必须包含一个数字 –亚瑟在奥林匹克竞赛中可以获得的最大分数。

第二行应该包含一个整数 m - 最优选择要解决的任务数。

第三行应包含 m 个以空格分隔的整数 - 这些问题的编号按照它们被解决的顺序排列。任务按照它们在输入文件中描述的顺序从一个开始编号。

如果有多个最佳答案,请打印其中任何一个。
例子
<头> <正文>
# 输入 输出
1 2
1 1 1
2 2 2
3
2
1 2
2 3
1 2 1
3 2 1
2 4 3
3
1
3