搜狐编程题第二题AC

public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] nums = new int[n];
        for(int i = 0 ; i < n ; i++){
            nums[i] = in.nextInt();
        }
        int min = helper1(nums,n);
        System.out.println(min);
    }
    public static int helper1(int[] nums,int n){
        int sum = 0;
        for(int num : nums){
            sum+=num;
        }
        int[][] dp = new int[n][n];
        for(int j = 0 ; j < n ; j++){
            dp[j][j] = nums[j];
            for(int i = j-1 ; i >= 0 ; i-- ){
                dp[i][j] = Math.max(dp[i+1][j], dp[i][j-1]);
                if(nums[j] == nums[i]){
                    dp[i][j] = Math.max(dp[i][j],dp[i+1][j-1]+nums[j]+nums[i]);
                }
            }
        }
        return 2*sum-dp[0][n-1];
    }
先求最小回文子序列的最大值,然后用和的两倍减去这个最大值
全部评论
和的两部减去最大值是什么思路啊? 谢谢
点赞 回复 分享
发布于 2017-09-18 11:20
666
点赞 回复 分享
发布于 2017-09-17 21:56

相关推荐

07-15 11:35
门头沟学院 Java
心里踏实多了,可以安心准备论文了
看不见我ffgh:牛哇佬,要不要来试一试pdd,部门氛围很好
京东开奖153人在聊
点赞 评论 收藏
分享
06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
05-22 09:23
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务