zoukankan      html  css  js  c++  java
  • USACO 2014 JAN 滑雪录像{silver题3}

    滑雪录像{silver3}

    【问题描述】

       冬奥会的电视时刻表包含N (1 <= N <= 150)个节目,每个节目都有开始和结束时间。农民约翰有两台录像机,请计算他最多可以录制多少个节目。

    【文件输入】

    第一行,一个整数N。

    接下来N行每行两个整数,表示一个节目的开始和结束时间,范围为0..1,000,000,000。

    【文件输出】

    一个整数,表示最多可以录制的节目数量。

    【输入样例】

    6

    0 3

    6 7

    3 10

    1 5

    2 8

    1 9

    【输出样例】

    4

    【样例说明】

    第1台录制节目1和3,第2台录制节目2和4。

    思路:一开始觉得用两次DP,第一次DP得出最优解,之后将最优解删去,再DP,最后得出的就是答案,但是本题由于两个录像可能会有覆盖,这样两次DP就需要有特判,然后特判很烦,也就没打,只有70分。后来得知本题原来可以贪心,我也是醉了、、、先将结束时间进行排序,然后记录两台录像机当前最后一个的结束时间,如果一个录像只能由一台相机录,那就给它录,如果两台录像机都可以录此录像,那么就选两台录像机中结束时间晚的那个来录它(至于为什么,也不用说了,自己想)。接下来上代码

     1 var
     2 s,t:array[0..150]of longint;
     3 i,n,t1,t2,ans:longint;
     4 
     5 procedure openit;
     6  begin
     7   assign(input,'recording.in');assign(output,'recording.out');
     8   reset(input);rewrite(output);
     9  end;
    10 
    11 procedure closeit;
    12  begin
    13   close(input);close(output);
    14  end;
    15 
    16 procedure qsort(l,r:longint);
    17  var i,j,m,temp:longint;
    18   begin
    19    i:=l;j:=r;m:=t[(l+r) div 2];
    20    repeat
    21     while t[i]<m do inc(i);
    22     while t[j]>m do dec(j);
    23     if not (i>j) then
    24      begin
    25       temp:=s[i];s[i]:=s[j];s[j]:=temp;
    26       temp:=t[i];t[i]:=t[j];t[j]:=temp;
    27       inc(i);dec(j);
    28      end;
    29    until i>j;
    30    if l<j then qsort(l,j);
    31    if i<r then qsort(i,r);
    32   end;
    33 
    34 
    35 begin
    36  openit;
    37  readln(n);
    38  for i:=1 to n do readln(s[i],t[i]);
    39  qsort(1,n);      //快排结束时间
    40  t1:=0;t2:=0;ans:=0;
    41  for i:=1 to n do
    42   begin
    43    if (s[i]>=t1) and (s[i]>=t2) then
    44     begin
    45      inc(ans);
    46      if t1>t2 then t1:=t[i]
    47               else t2:=t[i];
    48      continue;
    49     end;
    50    if s[i]>=t1 then begin inc(ans);t1:=t[i]; end;
    51    if s[i]>=t2 then begin inc(ans);t2:=t[i]; end;
    52   end;
    53  writeln(ans);
    54  closeit;
    55 end.
  • 相关阅读:
    div弹出层
    经典SQL语句
    sql连接及操作
    给flash加上连接
    在c#中图片原比例缩放
    悬浮提示筐
    拖动板块
    IFrame自适应高度
    SQL语句中的日期计算
    注意Request.Cookies["UserID"]的用法
  • 原文地址:https://www.cnblogs.com/p0226/p/4074408.html
Copyright © 2011-2022 走看看