腾讯笔试第一题:木棍合并为什么过不了?

rt,一个区间dp,自测数据都没问题,就是过不了,哪位大哥帮我看看哪里写错了。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        int[] res = new int[T];
        for(int i = 0; i < T; i++){
            int n = sc.nextInt();
            int[] a = new int[n+1];
            int[] sum = new int[n+1];
            int[][] dp = new int[n+1][n+1];
            for(int j = 0; j <= n; j++){
                Arrays.fill(dp[j], Integer.MAX_VALUE);
            }
            sum[0] = 0;
            for(int j = 1; j <= n; j++){
                a[j] = sc.nextInt();
            }
            for(int j = 1; j <= n; j++){
                sum[j] = a[j] + sum[j-1];
            }
            for(int j = 1; j <= n; j++){
                dp[j][j] = 0;
            }
            for(int k = 1; k < n; k++){
                for(int j = 1; j+k <= n; j++){
                    int m = k + j;
                    for(int x=j; x<m; x++){
                        dp[j][m] = Math.min(dp[j][m], dp[j][x] + dp[x+1][m] + sum[m] - sum[j-1]);
                    }
                }
            }
            res[i] = dp[1][n];
        }
        for(int r : res){
            System.out.println(r);
        }
    }
}
#腾讯##笔试题目#
全部评论
我们应该一套题,我这题用的小顶堆做的
点赞
送花
回复 分享
发布于 2020-08-23 22:06
还有把int改成long,加起来好像可能会超int
点赞
送花
回复 分享
发布于 2020-08-23 22:06
神州信息
校招火热招聘中
官网直投
我也是非常纳闷啊,自测数据感觉都没问题,但一调试就是0%。。。
点赞
送花
回复 分享
发布于 2020-08-23 22:08
直接用小顶堆做,不要用int,会爆,用long就过了
点赞
送花
回复 分享
发布于 2020-08-23 22:08
不需要用区间DP,用最小堆,每次弹出两个算和,再弹进去
点赞
送花
回复 分享
发布于 2020-08-23 22:12
好气啊,原来是int改成long,这题的测试用例不合理啊,一直调试0%,所以根本没想到是超出int范围了。。。。
点赞
送花
回复 分享
发布于 2020-08-23 22:28
我看了下他们后台的题,为什么我感觉客户端的要更难一些…
点赞
送花
回复 分享
发布于 2020-08-23 22:30
小顶堆每次poll两个最小的合并,合并了再offer进去,每个小木棍长度不大,但是合并后可能会爆int的,所以用long数组保存长度
点赞
送花
回复 分享
发布于 2020-08-24 10:54

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务