我认为它不会花费很多时间,但是所花费的时间却超出了我的预期。
我认为-是问题所在。
是什么让它花费很多时间?
有没有更好的方法来减少时间?
问题是
n =花数
a,b =花的盛开日期(月,日) c,d =花朵的落落日期(月,日)
(当花朵的秋天日期时,您看不到那朵花) (如果0530是秋天日期,则看不到0530上的那朵花)
我想每天从0301〜1130看花
打印最少的花朵
有人告诉我这是贪婪算法问题。
我不知道该如何减少时间了
我认为这是解决此问题的正确方法
flo_list = []
n = int(input())
for i in range(n) :
a, b, c, d = map(int, input().split())
flo_list.append((a*100 + b, c*100 + d))
flo_list.sort(reverse = True)
cnt = 0
srt_flo = sorted(flo_list, key = lambda i : i[1], reverse = True)
if flo_list[-1][0] > 301 :
print(0)
exit()
if srt_flo[0][1] < 1201 :
print(0)
exit()
for (i, j) in srt_flo :
if i <= 301 :
(f, e) = (i, j)
cnt = cnt + 1
break
while e < 1201 :
for (i, j) in srt_flo :
if f < i <= e :
(f, e) = (i, j)
cnt = cnt + 1
break
else :
cnt = 0
break
print(cnt)
答案 0 :(得分:0)
您应该尝试这样的事情:
from itertools import combinations
for comb_len in range(1,n) : # `n` -- is the total number of flowers
for comb in combinations( range(n), comb_len ) :
if this_combination_covers_all_dates( comb ) :
print 'need', comb_len, 'flowers', comb
this_combination_covers_all_dates( comb )
的实现取决于您=)