• Codeforces 671A Recycling Bottles(贪心+思维)


    题目链接:http://codeforces.com/problemset/problem/671/A

    题目大意:
    给你两个人的位置和一个箱子的位置,然后给出n个瓶子的位置,要求让至少一个人去捡瓶子放到箱子里面去,
    一次只能拿一个瓶子,求把全部瓶子捡完之后的距离总和最小。
    解题思路:
    开始有两个起点A,B。除了从A或B出发拿瓶子并回到箱子距离不确定,其他时候肯定要从箱子到瓶子再回到箱子,距离就是dis(箱子到瓶子)*2.
    关于从A,B出发拿瓶子,分三种情况:
    ①只有A拿
    ②只有B拿
    ③A拿一个瓶子,B拿一个瓶子(两个瓶子肯定不同)
    然后枚举即可。

    代码

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 using namespace std;
     6 
     7 double dis(int x,int y,int a,int b){
     8     return sqrt(1.0*(x-a)*(x-a)+1.0*(y-b)*(y-b));
     9 }
    10 
    11 int main(){
    12     int ax,ay,bx,by,tx,ty;
    13     scanf("%d%d%d%d%d%d",&ax,&ay,&bx,&by,&tx,&ty);
    14     double sum=0;
    15     double ma=1e18,mb=1e18,mab=1e18;
    16     int n;
    17     scanf("%d",&n);
    18     for(int i=1;i<=n;i++){
    19         int x,y;
    20         scanf("%d%d",&x,&y);
    21         double dt=dis(tx,ty,x,y);
    22         double da=dis(ax,ay,x,y)-dt;//让A拿的代价 
    23         double db=dis(bx,by,x,y)-dt;//让B拿的代价
    24         sum+=dt*2;
    25         mab=min(mab,min(ma+db,mb+da));
    26         ma=min(ma,da),mb=min(mb,db);
    27     }
    28     printf("%.12f",sum+min(mab,min(ma,mb)));//A拿一个B拿一个,或只让A拿,或只让B拿 
    29     return 0;
    30 }
  • 相关阅读:
    序一
    Python3 网络爬虫开发实战
    爬虫笔记
    celery
    用yield实现协程 和asyncio模块
    Django学习之完成数据库主从复制、读写分离和一主多从情况下的使用办法
    Django学习之缓存和信号
    Django学习之Django-debug-toobar
    Python面向对象
    Python中 if __name__ == "__main__" 的理解
  • 原文地址:https://www.cnblogs.com/fu3638/p/9892231.html
Copyright © 2020-2023  润新知