思路:暴力迭代,对于每个居民作为厂进行计算运输费用
注意:注意计算两点的距离的时候,计算顺时针距离和逆时针距离然后取两者最短
注意输入的是两点之间的距离,使用时记得进行处理转换
变量的清空,初始化,每次循环迭代时注意清零
#include <stdio.h>
#include <iostream>
#include <cmath>
using namespace std;
int a[10005];
int b[10005];
int len=0;
int main(){
int n;
cin>>n;
cin>>b[0]>>a[0];
len+=a[0];//计算全部长度的时候应该算上第一个
for(int i=1;i<n;i++){
int c;
cin>>b[i];
cin>>c;
a[i]=c+a[i-1];//记录每个居民点距离0的距离
len+=c;
}
int x,x1,x2,y;//计算顺时针距离和逆时针距离,判断哪个更少
int cost=0,co=0x7fffffff;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==0||j==0){//当起点或者终点为0点时
if(i==0&&j!=0){
x1=abs(a[j-1]);
x2=abs(len-x1);
x=min(x1,x2);
cost+=x*b[j];
}
if(j==0&&i!=0){
x1=abs(a[i-1]);
x2=abs(len-x1);
x=min(x1,x2);
cost+=x*b[j];
}
if(i==0&&j==0){
cost+=0;
}
}else{//其他时候
x1=abs(a[j-1]-a[i-1]);
x2=abs(len-x1);
x=min(x1,x2);
cost+=x*b[j];
}
}
if(cost<co){//更新最短距离
y=i;
co=cost;
cost=0;
}
cost=0;//注意代价每次应该重新清0
}
cout<<y<<","<<co<<endl;
}