您的位置:首页 > 其它

Wannafly模拟赛5 D Aria 全排列

2017-11-04 08:45 337 查看
思路:直接上next_permutation(a,a+n)数组开头和结尾,和sort一样。过了%20数据的童鞋试试把数组放dfs里面,因为每次dfs都会加上一个值,回溯求全排列的时候相当于己经不是原来的数组或者string,所以全局的话还要减去那个值。

#include<iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
typedef long long LL;
const int MAXN = 105;
const LL inf = 0x3f3f3f3f3f3f3f3f;
int a[MAXN];
int n, ans;
void dfs(int cur, int sum)
{
if(cur==n+1)
{
ans=max(ans, sum);
return ;
}
int cnt=0;
sum+=a[cur];
int num[MAXN]={};
while(sum)
{
num[cnt++]=sum%10;
sum/=10;
}
sort(num,num+cnt);
do
{
int s=0;
for(int i=0;i<cnt;++i)
s=s*10+num[i];
dfs(cur+1,s);
}while(next_permutation(num, num+cnt));
}
int main()
{
while(~scanf("%d", &n))
{
for(int i=1;i<=n;++i)
scanf("%d", &a[i]);
ans=0;
dfs(1, 0);
printf("%d\n", ans);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: