CF1216B.Shooting

传统题 时间 2000 ms 内存 256 MiB 4 尝试 1 已通过 1 标签

Shooting

题目描述

最近,Vasya 决定提升自己的手枪射击技能。今天他的教练给他布置了如下练习:他在桌子上按顺序摆放了 nn 个易拉罐,编号从左到右依次为 11nn。Vasya 需要将每个易拉罐恰好击倒一次,才能完成练习。他可以自由选择击倒易拉罐的顺序。

Vasya 知道第 ii 个易拉罐的耐久度为 aia_i。这意味着,如果 Vasya 已经击倒了 xx 个易拉罐,现在准备开始射击第 ii 个易拉罐,他需要用 (aix+1)(a_i \cdot x + 1) 次射击才能将其击倒。你可以假设 Vasya 一旦开始射击某个易拉罐,就会一直射击直到将其击倒。

你的任务是选择一种击倒易拉罐的顺序,使得击倒所有 nn 个易拉罐所需的总射击次数最少。

输入格式

输入的第一行包含一个整数 nn,表示易拉罐的数量,2n10002 \le n \le 1000

第二行包含 a1,a2,,ana_1, a_2, \dots, a_n,其中 aia_i 表示第 ii 个易拉罐的耐久度,1ai10001 \le a_i \le 1000

输出格式

第一行输出击倒所有 nn 个易拉罐所需的最少射击次数。

第二行输出 nn 个互不相同的整数,表示最优的击倒顺序(即易拉罐的编号)。如果有多种最优方案,可以输出任意一种。

说明/提示

在第一个样例中,Vasya 可以先击倒第一个易拉罐。由于之前没有击倒任何易拉罐,他只需射击 11 次即可击倒它。之后,他可以击倒第三个易拉罐,需要射击 201+1=2120 \cdot 1 + 1 = 21 次。最后只剩下第二个易拉罐,需要射击 102+1=2110 \cdot 2 + 1 = 21 次。因此总共需要 1+21+21=431 + 21 + 21 = 43 次射击。

在第二个样例中,由于所有易拉罐的耐久度相同,击倒顺序不会影响总射击次数。

由 ChatGPT 4.1 翻译

样例

3
20 10 20
43
1 3 2 
4
10 10 10 10
64
2 1 4 3 
6
5 4 5 4 4 5
69
6 1 3 5 2 4 
2
1 4
3
2 1 

在线编程 IDE

建议全屏模式获得最佳体验