题目描述
某一天电影院多个放映厅要放电影,小王从中选择了N部喜欢的电影(时间可能有冲突)。另外,小王还接到通知,必须看一部宣传片,问小王最多能看几部电影。
输入描述
输入文件中包含多个测试数据。每个测试数据的第1行为一个正整数N(1≤N≤20),表示小王选择的电影数(不包括宣传片);第2行为N部电影各自的开始时间s,第3行为N部电影各自的结束时间t,0≤s<t≤24,s和t均为整数;如果这N部电影中某些电影时间有冲突,则表示这些电影是在不同放映厅放映的;第4行为两个整数m和n,表示宣传片的开始时间和结束时间,0≤m<n≤24。N = 0表示输入结束。
输出描述
对每个测试数据,输出小王最多能观看到的电影数(不包括必须看的宣传片)。
样例输入
8
0 1 4 7 9 10 13 12
7 4 9 13 15 13 19 15
5 10
0
样例输出
3
运行限制
- 最大运行时间:1s
- 最大运行内存: 32M
思路:注意到每个测试数据中电影数量很小。先将和宣传片时间冲突必定看不了的电影去掉,剩下的电影里根据开始时间排序,最后通过DFS找出最多能看的电影数量。
import operator
def dfs(di,temp,shangjiewei):
global zong
if(di==ff):
if(temp>zong):
zong=temp
else:
dfs(di+1,temp,shangjiewei)
if(shangjiewei<=d[di]):
shangjiewei=c[d[di]]
dfs(di+1,temp+1,shangjiewei)
while(True):
n= eval(input())
if(n==0):
break
zong=0
a=list(map(int,input().split()))
b=list(map(int,input().split()))
c={}
e,f=map(int,input().split())
for i in range(n):
k=a[i]
p=b[i]
if(not((k>=e and k<f) or (p>e and p<=f) or (k<=e and p>=f))):
if(not k in c):
c[k]=p
else:
if(c[k]>p):
c[k]=p
d=sorted(c)
ff=len(d)
dfs(0,0,0)
print(zong)