列表

详情


NC14317. Aria

描述

𝐴𝑟𝑖𝑎是一名武侦高强袭科的学生,由于悬殊的实力差距,没有人可以
与她配合。所以正如她的名字一样(aria在歌剧中有独唱曲之意),𝐴𝑟𝑖𝑎一直都是孤身一人。
𝐴𝑟𝑖𝑎在无聊的时候会玩一种特殊的加法游戏,这个游戏是这样的:
∙ 给出𝑛个数𝑎𝑖,起初𝑠𝑢𝑚 = 0。
∙ 把这𝑛个数按1 ∼ 𝑛的顺序依次加入,即在第𝑖步时𝑠𝑢𝑚 = 𝑠𝑢𝑚 + 𝑎𝑖
∙ 每加入一个数后,可以把𝑠𝑢𝑚十进制按位拆开后随意重排,得到一个
新的数。重排允许前导0的出现,比如10可以重排成1或10。
但一直玩这个游戏只会觉得越来越无聊,所以𝐴𝑟𝑖𝑎想知道最后能得到
的最大的𝑠𝑢𝑚是多少。

输入描述

第一行,一个正整数𝑛。
第二行,𝑛个正整数𝑎𝑖

输出描述

一行,一个正整数,即最大的𝑠𝑢𝑚。

示例1

输入:

5
42 1 3 3 6

输出:

100

说明:

∙ 0+42=42
∙ 42+1=43
∙ 43+3=46
∙ 46+3=49→94
∙ 94+6=100

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 7ms, 内存消耗: 528K, 提交时间: 2021-07-12 19:25:21

#include<bits/stdc++.h>
using namespace std;
int n,a[6],s;
void dfs(int x,int y)
{
	if(x>=n)
	{
		s=max(s,y);
		return;
	}
	y+=a[x];
	int c[10];
	int cc=0;
	while(y>0)
	{
		c[cc++]=y%10;
		y/=10;
	}
	sort(c,c+cc);
	do
	{
		int ny=0;
		for(int i=0;i<cc;i++)
		{
			ny=ny*10+c[i];
		}
		dfs(x+1,ny);
	}while(next_permutation(c,c+cc));
}
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	dfs(0,0);
	cout<<s<<endl;
}

上一题