8 solutions
-
1
题解
就本题的测试案例来看,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
- 146
- Accepted
- 52
- Uploaded By