首页 > 编程语言 > 详细

多重背包转01背包(java)

时间:2021-03-15 00:20:32      阅读:45      评论:0      收藏:0      [点我收藏+]
public class Main{
    static int N=999999;
    public static void main(String[] args) {
        InputReader in=new InputReader(System.in);
        int[] time=new int[N];
        int[] beauty=new int[N]; 
        int[] dp=new int[N]; 
        int all,n,t,c,p;
        int i,j,len;
        String s1,s2;
        
        s1=in.readString();
        s2=in.readString();
        n=in.nextInt();
        len=0;
        int x1,x2,y1,y2;
        all=s1.indexOf(‘:‘);
        x1=Integer.parseInt(s1.substring(0,all));
        y1=Integer.parseInt(s1.substring(all+1,s1.length()));
        all=s2.indexOf(‘:‘);
        x2=Integer.parseInt(s2.substring(0,all));
        y2=Integer.parseInt(s2.substring(all+1,s2.length()));
        all=x2*60+y2-x1*60-y1;
        
        
        for(i=0;i<n;i++) {
            t=in.nextInt();
            c=in.nextInt();
            p=in.nextInt();
            if(p==0)p=N;
            for(j=1;j<=p;j=j<<1) {
                time[len]=j*t;
                beauty[len++]=j*c;
                p-=j;
            }
            if(p>0) {
                time[len]=p*t;
                beauty[len++]=p*c;
            }
        }//二进制处理
        
        for(i=0;i<len;i++) {
            for(j=all;j>=time[i];j--) {
                dp[j]=Math.max(dp[j],dp[j-time[i]]+beauty[i]);
            }
        }
        System.out.println(dp[all]);
    }
}

 

多重背包转01背包(java)

原文:https://www.cnblogs.com/ydcwp/p/14534259.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!