**
Leetcode: two city scheduling **
**
题目:There are 2N people a company is planning to interview. The cost of flying the i-th person to city A is costs[i][0], and the cost of flying the i-th person to city B is costs[i][1].
Return the minimum cost to fly every person to a city such that exactly N people arrive in each city.
例:Input: [[10,20],[30,200],[400,50],[30,20]]
Output: 110
Explanation:
The first person goes to city A for a cost of 10.
The second person goes to city A for a cost of 30.
The third person goes to city B for a cost of 50.
The fourth person goes to city B for a cost of 20.
The total minimum cost is 10 + 30 + 50 + 20 = 110 to have half the people interviewing in each city.
分析:总共有2N个人,有N个人去A地,N个人去B地,求总费用最小值。
(有人说用贪心算法,没看懂他是怎么用的)
要保证去A地和去B地的各有N个人,对去AB两地的差价排序,一分为二,一半去A,另一半就去B了。比如说,costs=[[260,770],[448,58],[926,666],[184,134],[840,110],[577,467]], 差价为diff=[-510, 50, 110, 260, 390, 730] (已排序过)。 值越小说明去A地越便宜,值越大,说明去B地越便宜。所以去A地的取前N个,去B的取后N个。
```python
class Solution:
def twoCitySchedCost(self,costs):
sorted_costs=sorted(costs,key=lambda x: x[0]-x[1])
total=0
for i in range(len(costs)):
if i <len(costs)/2:
total+=sorted_costs[i][0]
else:
total+=sorted_costs[i][1]
return total
或者:
```python
class Solution:
def twoCitySchedCost(self, costs):
costs.sort(key=lambda x:x[0]-x[1])
return sum(i[0] for i in costs[:len(costs)//2])+sum(j[1] for j in costs[len(costs)//2:])