9.21华为机试

我原以为自己最近算法刷得还不错,又被打回了原形。。。。。
第一道题,一个简单的二分,不过就是样例只能过85%,想了好久没想出来错的原因。
第二道题,开始看以为就是一个简单的bfs就好了,仔细一看发现事情没有那么简单,驿站可以兵变马,还可以马变兵,而且这还算一步,那bfs的正确性感觉都没有办法保证。就算用dijkstra,可是如果这个点换成兵或者马之后,dist是在这个点加一,还是怎么处理。woc,这玩意咋处理,我只是一个算法小菜鸡,请不要这样折磨我。
第三道题,最气的就是这道题,我看着很简单啊,不就是要一个序列化dp嘛,可是为什么就是死活通过0%,调了一个多小时,还是0%,难过啊!!!
#include <iostream>
using namespace std;

const int N = 10010;
int p[N], r[N], w[N];
int f[N];
int n;

int main() {
    cin >> n;
    for(int i = 0; i < n; i++) cin >> p[i];
    for(int i = 0; i < n; i++) cin >> r[i];
    for(int i = 0; i < n; i++) cin >> w[i];
    
    for(int i = 0; i < n; i++) {
        for(int j = 0; j <= p[i] - r[i]; j++) {
            f[p[i] + r[i]] = max(f[p[i] + r[i]], f[j] + w[i]);
        }
    }
    int res = 0;
    for(int i = 0; i < n; i++) res = max(res, f[p[i] + r[i]]);
    cout << res << endl;
    return 0;
}

贴一份代码,哪位老哥给我指点指点,今晚上觉都睡不舒服了。
//我感觉我的代码是f里面的下标可能越界,因为r的数据范围有点大,不过也不太清楚怎么改,请各位大佬指点!

#华为机试#
全部评论
第一题二分,算数组和要考虑数据范围,我把int改成long long就过了。第二题写了个dfs,细节没处理好,只过了55%。第三题我是打算骗分来着,把所有树按左边界排序,然后暴力回溯找最大值,没想到10^4范围竟然能过
2 回复 分享
发布于 2022-09-21 21:52 北京
第一题二分,第二题spfa,第三题dp(右边界排序递推)
1 回复 分享
发布于 2022-09-21 21:20 广东
第二题我用bfs过了80%,最朴素的方法远远最有效但是第二题出bug(写错变量)调试一个小时还多,所以第三题没写完只有0%,我想第三题背包能不能做出来
1 回复 分享
发布于 2022-09-21 21:18 江苏
马和兵各自维护自己的一个visited数组防止重复,然后bfs层序遍历即可。python BFS 过了85%, 不知道C++的话能不能100% ……
1 回复 分享
发布于 2022-09-21 21:16 北京
我是按照右边界排序后再dp的
1 回复 分享
发布于 2022-09-21 21:16 北京
请问大佬面试的是什么语言跟岗位啊,机试题好像不太一样
点赞 回复 分享
发布于 2022-10-07 03:49 河南
大佬们谁有原题呀  可以发一下不
点赞 回复 分享
发布于 2022-09-24 23:40 山东
请问原题是什么
点赞 回复 分享
发布于 2022-09-22 15:49 辽宁
用二分只过了10,大佬能分享一下代码吗😭
点赞 回复 分享
发布于 2022-09-22 12:04 北京
话说华为机试是怎么算分的?我觉得我悬呀
点赞 回复 分享
发布于 2022-09-21 21:34 北京
序列化dp是什么意思啊楼主~
点赞 回复 分享
发布于 2022-09-21 21:30 北京
大佬们都好强,能不能贴一份第三题ac代码
点赞 回复 分享
发布于 2022-09-21 21:24 广东
为啥我的和你们的不一样?
点赞 回复 分享
发布于 2022-09-21 21:17 北京

相关推荐

05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
评论
6
18
分享

创作者周榜

更多
牛客网
牛客企业服务