1 条题解
-
0
自动搬运
来自洛谷,原作者为

BFSBFSBFSBFS
**搬运于
2025-08-24 21:35:39,当前版本为作者最后更新于2017-12-28 08:45:53,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
贪心题.写证明.
题意.给出个节目.每个节目有开始时间与结束时间.
的2个节目不能放在1组..
求2组.最大化节目数量..
贪心策略:
....按照结束时间排序.
....若节目可以放.则必定放.
....尽量放在结束时间长的1组.
证明:
....对于其中1组.设它结束时间为.
....若有.则该节目可以放在这组上.
....我们希望结束时间越小越好.用来放置更多的节目.
....那么取.
....若有同样满足.
....用代替.
....那么节目总个数不会变.
....因.可能增大.并非最优.
....所以按结束时间排序的思想正确.
....从2组的角度来看.
....若要使节目数+1.
....与必然存在1个.
....所以若.且.
....放在则留下.
....放在则留下.
....因为.
....放在更优.
完毕.
还是很假.Diu代码.
program P2255; var a,b:array[0..151] of longint; i,j,n,t,t1,s:longint; begin readln(n); for i:=1 to n do readln(a[i],b[i]); //开始与结束时间.... for i:=1 to n-1 do //按结束时间排序.... for j:=i+1 to n do if (b[i]>b[j]) or (b[i]=b[j]) and (a[i]>a[j]) then begin t:=b[i]; b[i]:=b[j]; b[j]:=t; t:=a[i]; a[i]:=a[j]; a[j]:=t; end; t:=0; t1:=0; //2组分别的结束时间. s:=0; //具体节目数量.. for i:=1 to n do if a[i]>=t then //能放在第1组.. begin inc(s); if (t1>=t) and (a[i]>=t1) then t1:=b[i] //第2组能放.且更优.. else t:=b[i]; end else if a[i]>=t1 then //能放在第2组.. begin inc(s); t1:=b[i]; end; writeln(s); end.(ಡωಡ).
- 1
信息
- ID
- 1245
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者