小红书笔试
小红书笔试三道题一道都没A,第一题自定义排序91,第二题枚举+回溯55,第三题枚举+回溯0,cout骗了9%
全部评论
// 第二题
// 回溯 枚举
void run(long long& res, int curLen, vector<int> curIDs, const int n, vector<bool>& used, int k, const vector<int>& an, const vector<int>& 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);
}
}
}
我也用的回溯,做了一些剪枝,但还是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();
}
}
我感觉第二题能贪心,回溯不剪枝都会超时
可以看一下你的回溯代码吗?我回溯直接报运行时错误了(用例过了)
相关推荐
点赞 评论 收藏
分享
不管什么都不想跳动了:本人美团百度快手都待过,建议肯定是直接留快手多一点产出后转正or直接冲字节腾讯暑期吧。一是快手从福利到基建都吊打另外两家。美团现在这个业务比较惨,本来毛利就很低,亏损严重,今年很可能要优化人力降低成本,去了别说日常,就算暑期后面都很可能被优化。百度其实实习生权限挺高的,可以接触到一些含金量高的项目,但是现在的风评不如之前了,薪资也不高。二是转正概率和薪资是跟产出挂钩的,你都在手子已经积累产出了,去其他家日常实习产出都是从0开始,肯定不可能有你在手子转正可能性大啊,现在日常压根没必要去,而且我有两个师弟都是在快手日常转正的,不用太担心,安心留在手子一边多做一点产出然后一边冲字节腾讯暑期,字节腾讯今年实习岗位非常多的,不如好好把握这个,加油。
查看18道真题和解析 点赞 评论 收藏
分享
