小码哥最近获得了 n 颗珍珠,第 i 颗珍珠以任意顺序排列后串成一串项链,定义一个项链的美观值为相邻珍珠的美观值之差的绝对值之和,即
可以参考参考我的代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[10000],maxn=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",a+i);
for(int i=0;i<n;i++){
if(abs(a[0]-a[n-1])+abs(a[1]-a[2])<abs(a[1]-a[n-1])+abs(a[0]-a[2]))
swap(a[0],a[1]);
for(int j=1;j<n-2;j++)
if(abs(a[j]-a[j-1])+abs(a[j+1]-a[j+2])<abs(a[j+1]-a[j-1])+abs(a[j]-a[j+2]))
swap(a[j],a[j+1]);
if(abs(a[n-3]-a[n-4])+abs(a[n-2]-a[n-1])<abs(a[n-2]-a[n-4])+abs(a[n-1]-a[n-3]))
swap(a[n-2],a[n-1]);
if(abs(a[n-2]-a[n-3])+abs(a[n-1]-a[0])<abs(a[n-1]-a[n-3])+abs(a[0]-a[n-2]))
swap(a[n-1],a[0]);
}
for(int i=0;i<n-1;i++)
maxn+=abs(a[i]-a[i+1]);
maxn+=abs(a[n-1]-a[0]);
printf("%d",maxn);
}
部分供参考
#include<stdio.h>
#include<math.h>
#define max 10000
int cal(int t[],int i,int n)
{
int sum=0;
for(int j=i; j<=n; j++)
{
{
sum+=abs(t[j]-t[j+1]);
}
}
return sum;
}
int main()
{
int n, i, j,t[max];
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d",&t[i]);
}
t[0]=t[n];
t[n+1]=t[1];
int Max=cal(t,1,n);
for(i=1; i<=n; i++)
{
int tem=cal(t,i,n);
if(tem>Max)
{
Max=tem;
}
}
printf("%d",Max);
return 0;
}