【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
相关文章
相关标签/搜索