题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员,组成球队的首发阵容。
每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少?
dfs+剪枝
一定要时刻谨记还原现场的位置
#include <iostream>
#include <algorithm>
using namespace std;
bool st[25];
int ans = -2e9;
int g[5][20] = {
{97, 92, 0, 0, 89, 82, 0, 0, 0, 95, 0, 0, 94, 0, 0, 0, 98, 93, 0, 0},
{90, 85, 0, 0, 83, 86, 0, 97, 0, 99, 0, 0, 91, 83, 0, 0, 83, 87, 0, 99},
{0, 96, 0, 0, 97, 0, 0, 96, 89, 0, 96, 0, 0, 87, 98, 0, 99, 92, 0, 96},
{0, 0, 0, 80, 0, 0, 87, 0, 0, 0, 97, 93, 0, 0, 97, 93, 98, 96, 89, 95},
{0, 0, 93, 86, 0, 0, 90, 0, 0, 0, 0, 98, 0, 0, 98, 86, 81, 98, 92, 81}
};
int temp = 0;
void dfs(int u) {
if (u == 5) {
ans = max(ans, temp);
return;
}
for (int i = 0; i < 20; i++) {
if (!st[i] && g[u][i]) {
temp += g[u][i];
st[i] = true;
dfs(u+1);
temp -= g[u][i]; // ***
st[i] = false;
}
}
}
int main()
{
// 请在此输入您的代码
dfs(0);
cout << ans << endl;
return 0;
}