携程笔试 求助求助

我觉得携程的好难
第二题 y,o,u三种字符,拼成字符串;字符串存在you 加 2分 存在oo加一分 求一组字符能得到的最大的分
输入:第一行是字符组的个数n,后n-1行数字符租里 y,o,u分别的个数;
动态规划还不太会用 我直接暴力用的递归 但是base case设的不对 有大佬帮我看一下吗?
dp函数里的i是一个标识为,避免在第一次的时候进行判断;
但是跑不通base case有问题;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[][] nums = new int[n][3];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 3; j++) {
                nums[i][j] = scanner.nextInt();
            }
        }
        for(int[] tmp : nums){
            System.out.println(dp(tmp, 0,0,0,0));
        }

    }

    static int dp(int[] num,int x,int y,int u,int i){
        if(i != 0){
            if(x == 1){
                if(!(num[0] > 0 && num[1] > 0 && num[2] >0)){
                    return -2;
                }
            }
            if(x == 0){
                if(num[1] < 2){
                    return -1;
                }
            }
        }
        num[0] -= x;
        num[1] -= y;
        num[2] -= u;
        return Math.max(dp(num,1,1,1,1) + 2,dp(num,0,2,0,1));
    }
}


#秋招#
全部评论
这题为啥要用dp,直接求一下y,o,u里的最小值,再根据o减去最小值后剩下的个数能组成多少个oo就行了
5 回复 分享
发布于 2022-08-30 21:42 江苏

相关推荐

02-15 22:29
门头沟学院 Java
点赞 评论 收藏
分享
黑皮白袜臭脚体育生:春节刚过就开卷吗?哈基馆,你这家伙......
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务