zoukankan      html  css  js  c++  java
  • 【leetcode】1029. 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.

    Example 1:

    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.
    

    Note:

    1. 1 <= costs.length <= 100
    2. It is guaranteed that costs.length is even.
    3. 1 <= costs[i][0], costs[i][1] <= 1000

    解题思路:我的方法是把costs按照costs[i][0] - costs[i][1]的差值从小到大排序,然后前面一半的人去A,后面一半的人去B。至于为什么这样做,我也说不上来,感觉。

    代码如下:

    class Solution(object):
        def twoCitySchedCost(self, costs):
            """
            :type costs: List[List[int]]
            :rtype: int
            """        
            def cmpf(item1,item2):
                d1 = item1[0] - item1[1]
                d2 = item2[0] - item2[1]
                return d1 - d2
    
            costs.sort(cmp=cmpf)
            res = 0
            for i in range(len(costs)):
                if i < len(costs)/2:
                    res += costs[i][0]
                else:
                    res += costs[i][1]
            #print costs
            return res
  • 相关阅读:
    C#=>递归反转栈
    C#=> 栈模仿堆的操作
    C# 栈=>随时读取栈中最小值
    vijos1574 摇钱树
    (二叉)堆
    分块大法好
    list
    动态规划——状压、树形
    区间动规平行四边形优化
    最长公共子序列(LCS)
  • 原文地址:https://www.cnblogs.com/seyjs/p/10765564.html
Copyright © 2011-2022 走看看