蓝桥杯-看电影-python3

题目描述

某一天电影院多个放映厅要放电影,小王从中选择了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)


           

                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值