思路:这个题的关键在于明白如何取舍,谁应该去B。我们先假设所有人都去A,于是,我们要在所有去A的人中挑出去B的,那去B的应该满足什么条件呢?
他应该满足,去B后,省的钱最多,所以我们只要把差值算出来,然后排一下序把最省钱的一半人挑去B市就好了。
下面是C的代码
typedef struct _price{
int priceA;
int priceB;
int pricecha;
}price;
int cmp(const void *a, const void *b){
price* A = (price*)a;
price* B = (price*)b;
return A->pricecha - B->pricecha;
}
int twoCitySchedCost(int** costs, int costsSize, int* costsColSize){
price* P = (price*)malloc(costsSize * sizeof(price));
int sum = 0;
for(int i = 0; i < costsSize; i++){
P[i].priceA = costs[i][0]; //飞到A城市
P[i].priceB = costs[i][1]; //飞到B城市
P[i].pricecha = costs[i][1] - costs[i][0]; //假设都先飞到A城市
sum += costs[i][0]; //全部到A的价钱
}
qsort(P, costsSize, sizeof(price), cmp);
for(int i = 0; i < costsSize / 2; i++)
sum += P[i].pricecha;
return sum;
}