// 第二题 // 回溯 枚举 void run(long long&amp; res, int curLen, vector<int> curIDs, const int n, vector<bool>&amp; used, int k, const vector<int>&amp; an, const vector<int>&amp; bn){ if(curLen == k) { long long sum = 0; int minV = INT_MAX; for(int i = 0; i < k; ++i){ sum += an[curIDs[i]]; minV = min(minV, bn[curIDs[i]]); } res = res < sum * minV ? sum * minV : res; return; } for(int i = 0; i < n; ++i){ if(used[i] == false){ curIDs.emplace_back(i); used[i] = true; run(res, curLen+1, curIDs, n, used, k, an, bn); used[i] = false; curIDs = vector<int>(curIDs.begin(), curIDs.end()-1); } } }