题意:n头猪分别送往n座城市,每头猪重量不同,每一千克运送一公里会花费t元,每个城市距离养猪场的位置也不同,单位猪的价格也不同,求最优分配方案。
题解:贪心,每座城市猪的单位价格p减去到这座城市的距离d乘以t为把猪送到这座城市的单位获益,重的猪就送往获益大的地方。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 typedef long long LL; 6 struct data 7 { 8 LL p,d; 9 int id; 10 }pla[1005]; 11 struct pig 12 { 13 int w,id; 14 bool operator<(const pig &ne)const 15 { 16 return w<ne.w; 17 } 18 }pi[1005]; 19 int t,n; 20 bool comp(data a,data b) 21 { 22 return a.p-a.d*t<b.p-b.d*t; 23 } 24 int main() 25 { 26 while(scanf("%d%d",&n,&t)!=EOF) 27 { 28 for(int i=0;i<n;i++) 29 scanf("%d",&pi[i].w),pi[i].id=i+1; 30 for(int i=0;i<n;i++) 31 scanf("%lld",&pla[i].d); 32 for(int i=0;i<n;i++) 33 scanf("%lld",&pla[i].p),pla[i].id=i+1; 34 sort(pla,pla+n,comp); 35 sort(pi,pi+n); 36 int to[1005]; 37 for(int i=0;i<n;i++) 38 to[pla[i].id]=pi[i].id; 39 for(int i=1;i<n;i++) 40 printf("%d ",to[i]); 41 printf("%d\n",to[n]); 42 } 43 return 0; 44 }