滴滴笔试第二题


import java.util.Arrays;
import java.util.Scanner;

public class Main {
    static  int[][] arr;
    static  long[][] memo;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int s = in.nextInt();
        int n = in.nextInt();
        int m = in.nextInt();
        //n 奖励点数
        arr = new int[n][s];
        for(int i = 0;i < s;i++){
            for(int j = 0;j < n;j++){
                arr[j][i] = in.nextInt();
            }
        }
        for(int[] x : arr){
            Arrays.sort(x);
        }
        memo = new long[n][m + 1];
        for (int i = 0;i < n;i++){
            Arrays.fill(memo[i],-1);
        }
        System.out.println(dfs(0,m));
    }
    public static long dfs(int i,int m){
        if(m < 0) return Integer.MAX_VALUE / 2;
        if(i >= arr.length) return 0;
        if(memo[i][m] != - 1) return memo[i][m];
        long res = dfs(i + 1,m);
        //投资
        int[] x = arr[i];
        for(int j = 0;j < x.length;j++){
            if(m > 2 * x[j]){
                res = Math.max(res,dfs(i + 1,m - 2 * x[j] - 1) + (long)(j + 1) * (i + 1));
            }
        }
        return memo[i][m] = res;
    }
}
全部评论
第一题是 逆序对吗?
点赞 回复 分享
发布于 03-09 17:49 山西
咱们是同一套吗?我主页刚写了一下回忆版的题解。
点赞 回复 分享
发布于 03-09 17:58 江西

相关推荐

03-09 17:50
已编辑
哈尔滨理工大学 C++
点赞 评论 收藏
分享
评论
4
1
分享

创作者周榜

更多
牛客网
牛客企业服务