题意:用给定的一个数组中的元素作为树中的每一层的孩子结点个数,求能够构造出来的最大结点数。
思路:对于一棵树而言,越小的层数的孩子结点数越多则整棵树的结点也会相应越多。所以对数组中的元素排个序计算一下就好。
举例:
A=[2,1,3]
排序后:
A=[3,2,1]
结点个数为:
1+3+3×2+3×2×1=16
代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<stack>
#include<queue>
#include<utility>
#include<vector>
#include<cmath>
#include<set>
#include<map>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
int n;
int num[35];
int main()
{
while(scanf("%d", &n) == 1){
for(int i=0; i<n; i++){
scanf("%d", &num[i]);
}
sort(num, num+n);
LL ans = 1;
LL tmp = 1;
for(int i=n-1; i>=0; i--){
tmp *= num[i];
ans += tmp;
}
printf("%lld\n", ans);
}
return 0;
}