公司计划面试 2N 人。第 i 人飞往 A 市的费用为 costs[i][0],飞往 B 市的费用为 costs[i][1]。
返回将每个人都飞到某座城市的最低费用,要求每个城市都有 N 人抵达。
示例:
输入:[[10,20],[30,200],[400,50],[30,20]] 输出:110 解释: 第一个人去 A 市,费用为 10。 第二个人去 A 市,费用为 30。 第三个人去 B 市,费用为 50。 第四个人去 B 市,费用为 20。 最低总费用为 10 + 30 + 50 + 20 = 110,每个城市都有一半的人在面试。
提示:
1 <= costs.length <= 100costs.length为偶数1 <= costs[i][0], costs[i][1] <= 1000
#include<string.h> #include<iostream> #include<map> #include<vector> #include<functional> #include<algorithm> #define len 20 using namespace std; struct Data{ int costA; int costB; int absAminusB; int AminusB; Data(int a , int b){ costA = a, costB = b; AminusB = a - b; absAminusB = abs(AminusB); } }; int twoCitySchedCost(vector<vector<int>>& costs) { std::multimap<int, Data, std::greater<int>> map; for (auto iter = costs.begin(); iter != costs.end(); iter++){ //std::cout << "val" << (*iter)[0] << std::endl; Data data = Data((*iter)[0], (*iter)[1]); map.insert(std::make_pair(data.absAminusB, data)); } vector<Data> vCityA; vector<Data> vCityB; int totalCost = 0; for (auto iter = map.begin(); iter != map.end(); iter++){ auto bCityA = true; if (vCityA.size() == costs.size() / 2){ bCityA = false; } else if (vCityB.size() == costs.size() / 2){ bCityA = true; } else{ bCityA = iter->second.AminusB <= 0; } bCityA ? vCityA.push_back(iter->second) : vCityB.push_back(iter->second); bCityA ? totalCost += iter->second.costA : totalCost += iter->second.costB; } //for (auto iter = vCityA.begin(); iter != vCityA.end(); iter++){ // std::cout << "City A " << iter->costA << std::endl; //} //for (auto iter = vCityB.begin(); iter != vCityB.end(); iter++){ // std::cout << "City B " << iter->costB << std::endl; //} std::cout << "total cost " << totalCost << std::endl; return totalCost; } int main() { vector<int> v1 = { 10, 20 }; vector<int> v2 = { 30, 200 }; vector<int> v3 = { 400, 50 }; vector<int> v4 = { 30, 20 }; //vector<int> v5 = { 5, 500 }; vector<vector<int>> vcost = { v1, v2, v3, v4 }; twoCitySchedCost(vcost); int t; std::cin >> t; return 0; }
QQ:393422044
Email:fkrfkrfkr@163.com
浙公网安备 33010602011771号