機械臂

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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章