8 solutions

  • 1
    @ 2021-10-18 1:19:17

    题解

    就本题的测试案例来看,1 2 3 这三个数有三种不同的操作顺序 1:(1*2+1)3+1=10 2:(13+1)2+1=9 3:(23+1)*1+1=8 从中我们容易发现这样的顺序,如果要求最大值的话,那么每次先用最小的连个数相乘的结果+1,相反,如果要求最小值的话,每次先用最大的两个数相乘的结果+1.这样我们就可以写算法啦

    #include <bits/stdc++.h>
    using namespace std;
    int a[100005],b[100005];
    bool com(int a,int b){
    	return a>b;
    }
    int main(){
    	int n;
    	while(cin>>n&&n){
     		for(int i=0;i<n;i++) {
     			cin>>a[i];
     			b[i]=a[i];
    		 }
    		sort(a,a+n);
    		sort(b,b+n,com);
    		for(int i=1;i<n;i++){
    			a[i]=a[i]*a[i-1]+1;
    			sort(a+i,a+n);
    		}
    //		for(int i=0;i<n;i++) cout<<a[i]<<endl;
    		for(int i=1;i<n;i++){
    			b[i]=b[i]*b[i-1]+1;
    			sort(b+i,b+n,com);
    		}
    //		for(int i=0;i<n;i++) cout<<b[i]<<endl;
    		cout<<a[n-1]-b[n-1]<<endl;
    	}	
    	return 0;
    }
    

    Information

    ID
    95
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    # Submissions
    149
    Accepted
    53
    Uploaded By