华为机试:篮球比赛

题目来源

  • 华为机试:篮球比赛

题目描述

华为机试:篮球比赛_第1张图片

题目解析

这道题让我想起了算法:司机的最高收入,同样的思路,每个人要么分到A中,要么分到B中。

其限制条件是A区域分而且只能分到5个,求最小战斗力差值

#include 
#include 
#include 
#include 
#include 

using namespace std;

// 战队力
int minGap = INT_MAX;
void process(std::vector<int> nums, int idx, int restA, int restB, int sumA, int sumB){

    if(restA == 0 && restB == 0){
        minGap = std::min(minGap, std::abs(sumA - sumB));
        return ;
    }


    if(restA > 0){
        process(nums, idx + 1, restA - 1, restB, sumA + nums[idx], sumB);
    }

    if(restB > 0){
        process(nums, idx + 1, restA , restB - 1, sumA , sumB + nums[idx]);
    }

}

int main(int argc, char **argv)
{
    std::vector<int> nums {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
    process(nums, 0, 5, 5, 0, 0);
    std::cout << minGap;
}

你可能感兴趣的:(算法与数据结构,华为,c++,算法)