2023 携程春招笔试

本贴最后更新于 386 天前,其中的信息可能已经东海扬尘

昨天笔试录屏,做完后破防了。。。

今天上午回顾一下题目:

1. 简单 dp

A 了,就不写代码了

录屏截屏

image.png

2. 字符串拼接

简单模拟题,直接字符串拼接搞定

image.png

image.png

image.png

3. 高数求导求极值。。。

想复杂了。。。耗费了不少时间。。。

b8337c72e04492d594662f7fc5aba01

解方程

7b1e4fe0e661883041f5be800ca313d

import java.util.Scanner;

/**
 * Description:
 * date: 2023/03/08 上午 9:25
 *
 * @author Quan
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int v0 = in.nextInt(), x = in.nextInt(), y = in.nextInt();

        double ans =  2 * Math.sqrt(y / x) - (v0 / x * 1.0);
        System.out.println(ans);
    }
}

// 0 1 2
// 2.8284271247461903


4. 状态 dp + 01 背包

9d6dc03ec3937511292e7f9f577c246

耗费了 1 小时,早知道不去做这道题,专心攻克第三道算了。。。

import java.util.Scanner;

/**
 * Description:
 * date: 2023/03/07 下午 10:09
 *
 * @author Quan
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int n = in.nextInt(), x = in.nextInt();
        int[] A = new int[n + 1];
        int[] B = new int[n + 1];
        for (int i = 1; i <= n; i++) A[i] = in.nextInt();
        for (int i = 1; i <= n; i++) B[i] = in.nextInt();

        long[][][] dp = new long[n + 1][x + 1][3];
        // dp[i][j][0] - 不买
        // dp[i][j][1] - 原价买
        // dp[i][j][2] - 半价买

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= x; j++) {
                // 当前半价买,前一个必须原价买
                if (i > 1 && j - A[i] / 2 >= A[i - 1]) {
                    // j - A[i] / 2 >= A[i - 1]:剩下的钱要能够买前一个
                    dp[i][j][2] = dp[i - 1][j - A[i] / 2][1] + B[i];
                }

                // 原价买
                if (j >= A[i]) {
                    // 要么不买,要么在原价和半价中选择最大的
                    dp[i][j][1] = Math.max(dp[i - 1][j - A[i]][0],
                            Math.max(dp[i - 1][j - A[i]][1], dp[i - 1][j - A[i]][2]) + B[i]
                    );
                }

                // 上面的是01背包逻辑,下面则是状态转移,记录最大的数值
                dp[i][j][0] = Math.max(dp[i - 1][j][0], Math.max(dp[i - 1][j][1], dp[i - 1][j][2]));
                dp[i][j][1] = Math.max(dp[i - 1][j][1], dp[i][j][1]);
                dp[i][j][2] = Math.max(dp[i - 1][j][2], dp[i][j][2]);
            }
        }

        System.out.println(max(dp[n][x][0], dp[n][x][1], dp[n][x][2]));
    }

    private static long max(long a, long b, long c) {
        return Math.max(a, Math.max(b, c));
    }
}

// 输入
4 7
2 2 6 2
3 4 5 1

// 输出
12
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    529 引用 • 3527 回帖
1 操作
Hildaquan 在 2023-03-08 09:57:48 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...