问题 5622 --张博士的射击训练

5622: 张博士的射击训练★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 76  解决: 59
[提交][状态][命题人:]

题目描述

最近张博士决定提高他的手枪射击技能,因此他聘请了一位专业教练来训练他的射击技术。2023年新年第一天,张博士的教练让他做以下练习:把n个易拉罐排成一排放在桌子上并从左到右依次编号为123……n,张博士必须将每个易拉罐击倒一次才算完成训练。当然,张博士可以按照任意顺序击倒所有的易拉罐。

张博士知道第i个罐子的耐用度是ai。这意味着如果张博士已经击倒了x个易拉罐,现在要开始射击第i个易拉罐,则他需要(ai * x+1)次才能击倒第i个易拉罐。你可以假设,如果张博士开始射击第i个易拉罐,则他会一直射击,直到把它击倒为止。

你的任务是帮助张博士选择一种射击顺序,使得将n个给定的罐子中的每一个恰好击倒一次所需的射击次数尽可能少。

输入

输入共两行:

第一行包含一个整数n(2≤n≤1000):易拉罐的数量。

第二行共n个整数,为序列a1,a2an(1≤ai≤1000)的值,其中ai是第i个易拉罐的耐用度。

输出

输出两行:

第一行输出一个整数:将n个给定的易拉罐全部击倒一次所需的最小射击次数。

     第二行输出由n个不同的整数(1n)组成的序列(两个整数之间有一个空格),该序列是使所需射击次数最小化的罐头索引的顺序。如果有多个可行的方案,请确保输出序号小的尽量靠前所对应的方案。
样例输入
Copy
3
20 10 20
样例输出
Copy
43
1 3 2 

提示

测试样例2输入:
4
10 10 10 10
测试样例2输出:
64
1 2 3 4 

测试样例3输入:
6
5 4 5 4 4 5
测试样例3输出:
69
1 3 6 2 4 5 

来源

 

[提交][状态]