我认为它不会花费那么多时间(例如-如果条件检查循环),还有更好的方法吗?

时间:2019-09-11 07:51:59

标签: python for-loop if-statement

我认为它不会花费很多时间,但是所花费的时间却超出了我的预期。

我认为-是问题所在。

是什么让它花费很多时间?

有没有更好的方法来减少时间?

问题是

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)

1 个答案:

答案 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 )的实现取决于您=)