首页 > 顺丰笔试第2题
头像
在在很努力
编辑于 2020-08-29 17:16
+ 关注

顺丰笔试第2题

只能贡献第2题给大家参考一下了。。。第一题实在想不通
package mianshi;

import java.util.Scanner;

public class Main2
{

    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);

        while (sc.hasNext())
        {
            int n = sc.nextInt();
            int k = sc.nextInt();

            // 每个物品的价值
            int[] num = new int[n + 1];
            // 前缀和
            int[] sum = new int[n + 1];
            // 分割n个物品分割k次最大价值
            int[][] value = new int[n+1][k+1];
            // 所有车中最大的装货量,最小
            int[][] zong = new int[n+1][k+1];


            // 一开始没车,也没货
            value[0][0] = 0;
            sum[0] = 0;
            for(int i = 1;i <= n;i++)
            {
                num[i] = sc.nextInt();
                sum[i] = num[i] + sum[i-1];
            }

            
            zong[0][0] = 0;
            for(int i = 1;i <= n; i++)
            {
                // 只有一台车,只能全装了
                value[i][1] = sum[i] * sum[i];
                zong[i][1] = i;
            }

            for(int che = 2; che <= k;che++)
            {
                // 枚举总共物品数
                for(int j = che;j <= n;j++)
                {
                    value[j][che] = 0;
                    zong[j][che] = Integer.MAX_VALUE;
                    
                    for(int i = che - 1;i < j;i++)
                    {
                        // 假如第che号车运[i+1,j]的货
                        int tmp = sum[j] - sum[i];
                        tmp = tmp * tmp;
                        // 剩下的由che-1号车运[1,i]的货
                        if( (value[i][che - 1] + tmp ) > value[j][che])
                        {
                            value[j][che] = value[i][che-1] + tmp;
                            zong[j][che] = Math.max(zong[i][che-1],j - i);
                        } // 如果价值相等,那么看哪一种方式,某一辆车最大的运货量最小
                        else if((value[i][che - 1] + tmp ) == value[j][che])
                        {
                            zong[j][che] = Math.min(zong[j][che],Math.max(zong[i][che-1],j - i));
                        }
                    }
                }
            }

            System.out.println(value[n][k] + " " + zong[n][k]);
        }
    }
}


全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐