您的位置:首页 > 其它

gym Learning to Add 一个水题 结果看错题意了

2015-09-24 21:28 197 查看
题意:给你不超过五个数,然后挨个加起来,但是每加一个数得到的结果可能会把各个位弄乱,问到最后最大的结果是什么?

例子:

5

42 1 3 3 6

过程:

• 0 + 42 = 42

• 42 + 1 = 43

• 43 + 3 = 46

• 46 + 3 = 94

• 94 + 6 = 100

思路:我擦,我没看到题目中的one by one,想了一个小时,结果回头一看,我艹,挨个加起来,那就直接dfs一下,对每个中间结果各位进行全排列即可:
#include <algorithm>
#include <iostream>
#include <cstdio>
#include<algorithm>
using namespace std;

int N;
int A[10];

int mx=0;

void dfs(int x, int sum)
{
    if( x==N){ mx = max(mx, sum); return; }
    int num[10] = {0};
    sum += A[x];
    int ans = sum;
     int n = 0;
    while( ans ){ num[n++]=ans%10; ans/=10; }
   sort(num,num+n);
    while(1)
    {
        int t = 0;
        for(int i = 0; i < n; i++)
            t *= 10, t += num[i];
        dfs(x+1, t);
        if( !next_permutation(num, num+n) ) break;
    }
    return;
}

int main()
{
    scanf("%d", &N);
    for(int i = 0; i < N; i++)
        scanf("%d", &A[i]);
    dfs(0, 0);
    printf("%d\n", mx);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: