n個機械臂讀取n-1條記錄,代價爲距離差,求最小總代價。
#include<cstdio>
#include<string.h>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
#define maxn 10005
int n;
int s[maxn];
int t[maxn];
int i,j,k;
int a[maxn];
int b[maxn];
int ne[maxn];
int res;
int main()
{
while(1)
{
scanf("%d",&n);
if(n==0)break;
n--;
for(i=0;i<=n;i++)
cin>>s[i];
for(i=0;i<n;i++)
cin>>t[i];
sort(s,s+n+1);
sort(t,t+n);
for(i=0;i<n;i++)a[i]=abs(s[i]-t[i]);
for(i=1;i<n;i++)a[i]+=a[i-1];
for(i=0;i<n;i++)b[i]=abs(s[i+1]-t[i]);
for(i=n-2;i>=0;i--)b[i]+=b[i+1];
j=0;
for(i=0;i<=n;i++)
{
if(j>=n)j--;
ne[i]=abs(s[i]-t[j]);
while(j<n)
{
if(abs(s[i]-t[j])<ne[i])
ne[i]=abs(s[i]-t[j]);
if(t[j]>s[i])
{
j--;
if(j<0)j=0;
break;
}
j++;
}
}
res=2000000000;
for(i=0;i<=n;i++)
{
k=ne[i];
if(i-1>=0)k+=a[i-1];
if(i<n)k+=b[i];
if(k<res)res=k;
}
printf("%d\n",res);
}
return 0;
}