0 点赞 评论 收藏   
分享
 0 点赞 评论 收藏   
分享
 林不厌:刚接到HR电话,简单聊了聊我的情况,然后被告知通过,明天会把offer发邮箱里,第一份工作,还愿牛客!
0 点赞 评论 收藏   
分享
 0 点赞 评论 收藏   
分享
 0 点赞 评论 收藏   
分享
 牛客59545933...:为啥三道题都是18%。。有这么巧合么
0 点赞 评论 收藏   
分享
 ≈666≈:第二题为啥我也是直接这么做的,样例能过,但是测试通过0
0 点赞 评论 收藏   
分享
 0 点赞 评论 收藏   
分享
 fee-feng:public static void main(String[] args){
    int n,m,c;
    n=sc.nextInt();
    m=sc.nextInt();
    for(int i=0 ; i<n ; i++ ){
        int sum=0;// 求该层的物品价值总和
        c=sc.nextInt();
        for(int j=0 ; j<c ; j++ ){
            a[j] = sc.nextInt();
            sum+=a[j];
        }
        Arrays.fill(val,0);
        for(int k=1 ; k<=c ; k++){ // 当前层获得k件物品可得的最大值存入val
            int index= 0 , now = 0;// 滑动窗口,窗口大小为c-k
            while(index < c-k)// 初始窗口 从第一个开始累加
                now +=a[index++];
            val[k] = Math.max(val[k],sum-now);
            while(index<c){ // 开始往右边移动
                now+= a[index];
                now-=a[index-(c-k)];
                val[k] = Math.max(val[k],sum-now); //求的是窗口以外的数和最大值
                index++;
            }
        }
        // 此时该层的val已经求出 01背包求解
        for(int j=m ; j>0 ; j--){
            for(int k=1 ; k<= Math.min(j,c) ; j++ )
                dp[j] = Math.max(dp[j],dp[j-k]+val[k]);
        }
    }  
    System.out.println(dp[m]);
}
0 点赞 评论 收藏   
分享
 0 点赞 评论 收藏   
分享
 已注销:经典题,UVA 1642
0 点赞 评论 收藏   
分享
 0 点赞 评论 收藏   
分享
 0 点赞 评论 收藏   
分享
 创作者周榜
更多 
 关注他的用户也关注了: