电子科技大学 1727

本文介绍了一种解决楼层搬运问题的算法,通过合理规划物品搬运路径来最小化搬运过程中的上楼层数。该问题设定在一个共100层的大厦内,主人公需要在晚上兼职搬运工,并且大厦没有电梯。算法考虑了物品从起点到终点的搬运需求,并确保了在完成所有搬运任务的同时,尽可能减少体力消耗。
摘要由CSDN通过智能技术生成
  1. Time Limit: 1000 ms Memory Limit: 65535 kB Solved:41 Tried: 269

    Submit

    Status

    Best Solution

    Back

    Description

    君子爱财取之有道,beap天生具有商业头脑,他坚信:只要胆子大,钞票随风来。

    额,在beap实现他宏伟的商业计划之前,他需要收集启动资金,于是他白天上课,晚上兼职搬运工。

    beap在高达100层的帝国大厦工作(大厦居然没有电梯,我去T.T、)。

    每天晚上,beap有m个物品需要搬运:xi yi,表示物品i需要从xi层搬运到yi层(xi<=yi)。并且每个物品都非常重,因此beap每次只能搬运一件物品上下楼,或者空手上下楼。当然,beap可以在搬运某个物品的途中停下来,将该物品放在他所处的楼层,然后去做其他事情。

    工作开始时,beap在1层,现在他想知道他至少需要上多少层楼才能完成所有的工作(不计下楼的层数,根据能量守恒:上楼比下楼累多了)

    Input

    多组测试数据。
    对于每组测试数据,第一行为整数m (0< m <= 50),
    接下来的m行,每行有两个整数x,y(0 < x <= y <= 100),含义如上文所述。

    Output

    对于每组测试数据,首先输出当前为第几组测试数据,然后输出最少的上楼层数。更多具体格式见样例。

    Sample Input

    2
    1 6
    2 5
    3
    1 5
    5 10
    10 20
    4
    1 6
    1 10
    1 20
    1 100
    5
    1 6
    1 10
    1 20
    7 49
    1 100

    Sample Output

    Case 1: 8
    Case 2: 19
    Case 3: 132
    Case 4: 174
  2. include<iostream>   
  3. #include<cstdio>   
  4. #include<cstring>    
  5. #include<ctype.h>   
  6. #include<vector>   
  7. #include<algorithm>   
  8. #include<cmath>   
  9. #include<queue>   
  10. #include<set>   
  11. #include<string>   
  12. #include<stack>   
  13. using namespace std;   
  14.   
  15. struct my  
  16. {  
  17.     int x,y;  
  18. }  
  19. go[111];  
  20.   
  21. int n;  
  22.   
  23. bool cmp(my a,my b)  
  24. {  
  25.     if (a.x!=b.x)  
  26.         return a.x<b.x;  
  27.     return a.y<b.y;  
  28. }  
  29.   
  30. int main()  
  31. {  
  32.     int i,j,k;  
  33.     int num=0;  
  34.     while (cin>>n)  
  35.     {  
  36.         num++;  
  37.         int xx=0;  
  38.         int yy=0;  
  39.         int big=0;  
  40.         for (i=0;i<n;i++)  
  41.         {  
  42.             cin>>go[i].x>>go[i].y;  
  43.             xx+=go[i].x;  
  44.             yy+=go[i].y;  
  45.             big=max(big,go[i].y);  
  46.         }  
  47.         sort(go,go+n,cmp);  
  48.         int ans=big-1;  
  49.         j=go[0].y;  
  50.         for (i=1;i<n;i++)  
  51.         {  
  52.             if (j>go[i].x)  
  53.             {  
  54.                 k=min(j,go[i].y);  
  55.                 ans+=k-go[i].x;  
  56.             }  
  57.             j=max(j,go[i].y);  
  58.         }  
  59.         cout<<"Case "  
  60.             <<num<<": "  
  61.             <<ans<<endl;  
  62.     }  
  63.     return 0;  
  64. }  

    先把 1--->最大层的上楼数加入到 ans

    

   

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值