HDOJ 1050解题报告

  这道题我刚开始是想先把所有的搬桌子的任务按照起点进行排序,然后再算出时间,可是一直没有思路。

  上网找了找,发现了一个很巧妙的方法,其实就是换种思路来思考问题。应走道两边各有200个房间,把走道等分为200个节点,每个节点有桌子经过时,节点经过次数加一,求完成任务的时间实际上就是求经过的过道节点次数最多的地方。代码如下:

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main(void)
 4 {
 5     int t,n,u,d,i,j,move[201];
 6     scanf("%d",&t);
 7     while(t>0)
 8     {
 9         scanf("%d",&n);
10         if(n>200||n<=0)
11             break;
12         memset(move,0,sizeof(move));
13         for(j=0;j<n;j++)
14         {
15             scanf("%d%d",&u,&d);
16             u=(u-1)/2;
17             d=(d-1)/2;
18             if(u>d)
19             {
20                 i=u;u=d;d=i;
21             }
22             for(i=u;i<=d;i++)
23                 move[i]++;
24         }
25         i=move[0];
26         for(j=0;j<200;j++)
27             if(move[j]>i)
28                 i=move[j];
29         printf("%d\n",i*10);
30         t--;
31     }
32     return 0;
33 }

 

转载于:https://www.cnblogs.com/pierce1024/archive/2013/04/18/3029182.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值