【Python3】【貪心】hdu4296 Buildings

題意:python

n個板,每一個板有重量和強度w和s,還有PDV值(上面的總重量-該板的強度)
對於某種疊放方式,PDV的最大值爲其表明值
求該值的最小值
 
考慮只有兩個板的狀況:a和b,很顯然下面的比上面的容易損壞,因此下面的PDV大。假設a在上面,其PDV值 = pdvb = wa - sb。假設b在上面,其PDV值 = pdva = wb - sa。而後兩個值取最小,若a在上面的PDV小,則 wa - sb < wb - sa,即wa + sa < wb + sb。同理,若b在上面的PDV小,則wb + sb < wa + sa。
擴展到有n個板的狀況,任意兩個相鄰的板不對其餘板產生影響,因而按照w+s從小到大排序,自頂向下排列便可。
try:
    while True:
        n = input();
        n = int(n);
        a = [];
        for i in range(0, n):
            str = input().split();
            a += [[int(str[0]), int(str[1])]];
        a = sorted(a, key = lambda x: x[0]+x[1]);
        sumv = 0;
        maxx = 0;
        for i in range(0, n):
            maxx = max(maxx, sumv-a[i][1]);
            sumv += a[i][0];
        print(maxx);
except EOFError:
    pass
相關文章
相關標籤/搜索