标签:权重 输出 htm nbsp tle 整数 body ++ clu
我国蒙古大草原上有N(N是不大于100的自然数)个牧民定居点P1(X1,Y1)、P2(X2,Y2)、 …Pn(Xn,Yn),相应地有关权重为Wi,现在要求你在大草原上找一点P(Xp,Yp),使P点到任 一点Pi的距离Di与Wi之积之和为最小。
即求 D=W1*D1+W2*D2+…+Wi*Di+…+Wn*Dn 有最小值
约定距离Di=|Xp-Xi| + | Yp-Yi|
5
2 4 7
8 11 12
15 8 8
12 80 12
20 60 20
1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 const int INF=100000000; 5 int x[101],y[101],imp[101]; 6 inline int abs(int x){if(x>0)return x;else return -x;} 7 int main() 8 { 9 int n,ax=-INF,ay=-INF,ix=INF,iy=INF; 10 scanf("%d",&n); 11 for(int i=1;i<=n;i++) 12 { 13 scanf("%d%d%d",&x[i],&y[i],&imp[i]); 14 ax=max(ax,x[i]); 15 ix=min(ix,x[i]); 16 ay=max(ay,y[i]); 17 iy=min(iy,y[i]); 18 } 19 int tmp,ans=INF; 20 for(int i=ix;i<=ax;i++) 21 { 22 tmp=0; 23 for(int j=1;j<=n;j++) tmp+=abs(i-x[j])*imp[j]; 24 ans=min(ans,tmp); 25 } 26 int a1=ans; 27 ans=INF; 28 for(int i=iy;i<=ay;i++) 29 { 30 tmp=0; 31 for(int j=1;j<=n;j++) tmp+=abs(i-y[j])*imp[j]; 32 ans=min(ans,tmp); 33 } 34 ans+=a1; 35 printf("%d",ans); 36 return 0; 37 }
标签:权重 输出 htm nbsp tle 整数 body ++ clu
原文地址:http://www.cnblogs.com/the-unbeatable/p/6361659.html