0-1背包|题解-简单的烦恼

题目:

定时t时间关闭播放音乐,最多能听多长时间的歌?

思路:

找边界,据题意,播放音乐时长超过n越长越好,那么最大边界就是n+max[v[i]]-1。背包问题中的体积和价值在这里都是v[i]。

再按照01背包模板写就可以了。

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
//        第i首歌进来,使得前i-1首歌<=n-1,而第i首歌进来>=n,即dp[i]-v[i]<n
//         总的-不选的>=n, n-不选的<=max(v[i])-1
//         所以实际边界是,n+max[v[i]]-1
        int T=in.nextInt();
        for(int i=0;i<T;i++){
            int n=in.nextInt();
            int t=in.nextInt();
            int [] nums=new int[n+1];
            int max=0;
            for(int j=0;j<n;j++){
                nums[j]=in.nextInt();
                if(nums[j]>max){
                    max=nums[j];
                }
            }
			
            int[] dp=new int[t+max];
            
            for(int a=0;a<=n;++a){
                for(int b=t+max-1;b>=nums[a];b--){
                    dp[b]=Math.max(dp[b],dp[b-nums[a]]+nums[a]);
                }
            }
            System.out.println(dp[t+max-1]);
        }
         
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 12:11
我最近都有点不想活了,天天早10晚11的,还问我爱不爱她目前的状态别说爱谁了,没扇谁就不错了。是不是大家都是一进节子,只有工作没有爱情了
AzureSkies:在字节的时候找的就是字节的,飞书太适合恋爱人士了,能看到是不是已读,是不是在会议中。简直冥婚好伴侣
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
qq乃乃好喝到咩噗茶:院校后面加上211标签,放大加粗,招呼语也写上211
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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