题目描述
给定一个由n个正整数组成的数列,对数列进行一次操作:去除其中两项a、b,然后添加一项a×b+1。每操作一次数列减少一项,经n−1次操作后该数列只剩一个数。试求在n-1次操作后最后得数的最大值。
输入描述
多组输入,每组两行,第一行输入正整数n,第二行输入n个正整数 n<20
输出描述
对每组输入,输出最后剩下的一个
样例输入
6
8 9 3 6 5 4
样例输出
29493
思想:每次找最小的两个数相乘加1,最后得到的结果最大
1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int n; 5 while(cin>>n){ 6 int i,j; 7 unsigned long long m; 8 unsigned long long num[n]; 9 for(i=0;i<n;i++){ 10 cin>>num[i]; 11 } 12 while(n!=1){ 13 for(i=0;i<n-1;i++){ 14 for(j=0;j<n-i-1;j++){ 15 if(num[j]>num[j+1]){ 16 m=num[j]; 17 num[j]=num[j+1]; 18 num[j+1]=m; 19 } 20 } 21 } 22 m=num[0]*num[1]+1; 23 num[0]=m; 24 n--; 25 for(i=1;i<n;i++){ 26 num[i]=num[i+1]; 27 } 28 } 29 cout<<num[0]<<endl; 30 } 31 return 0; 32 }