我也用的回溯,做了一些剪枝,但还是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

相关推荐

牛至超人:您好,京东物流岗了解一下吗?负责精加工食品的端到端传输
点赞 评论 收藏
分享
01-12 17:45
门头沟学院 Java
985废物一枚:就是问问你能不能接受北京的房租,hr也知道公司工资不高,大概率是要贴钱的
找实习记录
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务