我也用的回溯,做了一些剪枝,但还是9%通过 int n, k; int ret = 0; vector<int> group; void Loop(const vector<Info> &infos, int i, int m) { if (group.size() + n - m - 1 < k) return; if (i == k) { int a_sum = 0, b_min = -1; for (int j = 0; j < k; ++j) { a_sum += infos[group[j]].a; if (b_min == -1) b_min = infos[group[j]].b; else b_min = min(b_min, infos[group[j]].b); } ret = max(ret, a_sum * b_min); return; } for (int j = m + 1; j < n; ++j) { group.push_back(j); Loop(infos, i + 1, j); group.pop_back(); } }
点赞 3

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
牛客网
牛客企业服务