得物笔试AK

T1 100%

T2 100%

前两个都是模拟,没啥说的。

T3 100%

跳跃游戏,有n+1个点,从0跳到n。有四种跳跃方式(跳一格、两个、三个、四个),逐一选择,全都选完一遍后会刷新。跳跃点上有金币,不能让自己金币为负数。

常规DP解决。

        for(int i = 1; i <= n; i++) a[i] = in.nextLong();
        long[][] dp = new long[n+1][15];
        for(int i = 0; i <= n; i++) for(int j = 0; j < 15; j++) dp[i][j] = -1;
        dp[0][0] = 0;
        for(int i = 1; i <= n; i++){
            for(int j = 0; j < 15; j++){
                for(int l = 0; l < 4; l++){
                    if((j & (1 << l)) == 0){
                        // 0和15等价
                        int p = (j + (1 << l)) == 15 ? 0 : (j + (1 << l));
                        if(i - (l + 1) >= 0 && dp[i-(l+1)][p] != -1){
                            dp[i][j] = Math.max(dp[i][j], a[i] + dp[i-(l+1)][p]);
                        }
                    }
                }
            }
        }
        for(int i = 0; i < 15; i++) res = Math.max(res, dp[n][i]);
        System.out.println(res);

写的第一版代码不是DP,因为习惯DFS+cache的写法,但是下面代码好像有问题,从0位置开始,没法知道后续选择是否成立。还得从n开始,map里面放的是前面位置的元素(和dp一样)

    public long dfs(int ind, int p, long cur){
        if(ind == n) return 0;
        int key = ((ind << 10) | p);
        if(mp.containsKey(key)) return mp.get(key);
        long ans = -1;
        for(int i = 1; i <= 4; i++){
            if((p & (1 << i)) != 0 && (ind + i) <= n){
                int nind = ind + i;
                int np = (p - (1 << i)) == 0 ? 30 : (p - (1 << i));
                long ncur = cur + a[ind + i];
                // long cans = dfs(nind, np, ncur);
                if(dfs(nind, np, ncur) != -1){
                    ans = Math.max(ans, a[ind + i] + dfs(nind, np, ncur));
                }
            }
        }
        mp.put(key, ans);
        return ans;
    }

全部评论
得物一般笔完多久给面呀?请问
点赞 回复 分享
发布于 04-19 21:50 湖南
ak 了也会被面试放鸽子
点赞 回复 分享
发布于 04-10 15:31 广东
是后端吗,3月15号投的,给我转到数据分析岗了
点赞 回复 分享
发布于 04-09 15:23 四川
woc 得物怎么没给我发笔试
点赞 回复 分享
发布于 04-08 23:00 北京

相关推荐

05-08 12:11
武汉大学 Java
投递上海得物信息集团有限公司等公司6个岗位
点赞 评论 收藏
分享
微信小程序的开发使用了&nbsp;MINA&nbsp;框架(Minimalist&nbsp;Approach),这是一个专门为微信小程序设计的高性能框架,主要目的是提供更好的开发体验和性能表现。以下是对微信小程序&nbsp;MINA&nbsp;框架原生开发的回顾,包括其架构、特性以及使用示例等内容。1.&nbsp;MINA&nbsp;框架架构MINA&nbsp;框架的架构主要由以下几部分组成:https://www.nowcoder.com/issue/tutorial?zhuanlanId=j572L2&amp;uuid=478c9885c4a9463fad6a2e9d7c1ff512小程序逻辑层:负责处理业务逻辑,包括数据请求、状态管理等,通常由&nbsp;JavaScript&nbsp;代码实现。小程序视图层:使用&nbsp;WXML&nbsp;和&nbsp;WXSS&nbsp;描述&nbsp;UI&nbsp;结构和样式,与&nbsp;HTML&nbsp;和&nbsp;CSS&nbsp;类似。小程序数据层:通过&nbsp;API&nbsp;调用获取和存储数据。2.&nbsp;主要特性组件化开发:小程序支持将&nbsp;UI&nbsp;和逻辑拆分为可复用的组件,提高了代码的复用性和可维护性。数据绑定:采用双向数据绑定机制,使得&nbsp;UI&nbsp;和数据模型保持同步,简化了开发过程。良好的性能:MINA&nbsp;框架针对小程序的特性进行了优化,提供了高效的渲染和交互性能。丰富的&nbsp;API&nbsp;接口:提供了丰富的原生&nbsp;API&nbsp;接口,包括网络请求、文件管理和多媒体等,方便开发者进行各种操作。多种开发工具:微信开发者工具提供了调试、预览和打包等功能,提升了开发效率。
点赞 评论 收藏
分享
评论
1
4
分享

创作者周榜

更多
牛客网
牛客企业服务