机械臂

来源:互联网 发布:php下拉菜单取数据库 编辑:程序博客网 时间:2024/04/27 00:50

n个机械臂读取n-1条记录,代价为距离差,求最小总代价。

#include<cstdio>#include<string.h>#include<iostream>#include<cmath>#include<cstdlib>#include<algorithm>using namespace std;#define maxn 10005int 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;}


原创粉丝点击