321
社区成员




某石油公司需要向A、B两地运输石油。两地的需求量不同,而一辆车只能装载一定量的石油。经过计算A地需要a辆车,B地需要b辆车运输才能满足需求。现在一共有n辆车分布在各地,每辆车前往A、B两地运输石油均可以获得一定不等的利润。 现在请你安排a辆车前往A地,b辆车前往B地运输石油,使得在满足A、B两地石油需求的前提下,获得最大的利润。每辆车只能前往一地运输石油。
其他小伙伴有 dfs 做法,有背包做法,老顾就是不相信,除了这些没其他做法,就一直和自己较劲。
从碰到这个题目,这已经是第四次做了,一点一点完善老顾自己的排序做法,总算弄出来了。之后再碰到这个题目,就换做法。
https://blog.csdn.net/superwfei/article/details/129236799?spm=1001.2014.3001.5502 周赛32期
https://blog.csdn.net/superwfei/article/details/130320115?spm=1001.2014.3001.5502 周赛48期
n,a,b = map(int,input().split())
arr,ans = [list(map(int,input().split())) + [0] for _ in range(n)],0
inp = '{},{},{},{}'.format(n,a,b,arr[:10])
arr.sort(key = lambda x:(-(x[0] - x[1]),-x[0]))
for i in range(a):
arr[i][2] = 1
arr.sort(key = lambda x:(-(x[1] - x[0]),x[0]))
for i in range(b):
arr[i][2] = -1
if a + b == n:
ans = sum([v[0] for v in arr if v[2]==1]) + sum([v[1] for v in arr if v[2]==-1])
else:
arr.sort(key = lambda x:-max(x[0],x[1]))
c,t = 0,[]
while a > 0 or b > 0:
v = arr[c]
if v[2] == 1 and a > 0:
a -= 1
ans += v[0]
elif v[2] == -1 and b > 0:
b -= 1
ans += v[1]
else:
t.append(v)
if len(t) == a + b and a + b > 0:
t.sort(key = lambda x:(-(x[0] - x[1]),-x[0]))
for i in range(a):
ans += t[0][0]
t.pop(0)
t.sort(key = lambda x:-x[1])
for i in range(b):
ans += t[0][1]
t.pop(0)
a = b = 0
c += 1
print(ans)
https://www.nowcoder.com/questionTerminal/f230e7bbe8ee47e4b98517e66141acdc
牛客网,一模一样的题目,没能 ac ,表示算法有问题,回头再研究。