题解:P15063 [UOI 2024 II Stage] Creating an Array

· · 题解

题面简化

给定 09 每个数字的出现次数,你需要构造一个数,使得所有位置满足:前一个下标不大于后一个下标的数对、拼接起来的数相加的和最大。

思路

因为每个数对连接之和的贡献就是前面数字的个数加上后面数字的个数十倍的和,所以要使数组的连接之和最大,就要使较大数放在前面,较小数放在后面,也就是倒序输出

代码实现

#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[10];
signed main(){
    for(int i = 0; i < 10; i++)cin >> a[i]; //注意:数组得从 0 至 9输入,我就是从 1 开始输入,一分没得。
    for(int i = 9; i >= 0; i--)for(int j = 1; j <= a[i]; j++)cout << i << " ";
    return 0;
}