java 01背包问题 清晰源代码

 运行  代码如下

package test2;

import java.util.Scanner;

public class zeroone {

public static void main(String[] args) {
   //1.输入物品种类 及 n的大小   n=5
  
  Scanner sc = new Scanner(System.in);
  
      System.out.print("请输入物品的种类:");
  
      int type = sc.nextInt();
    
  
   //2.输入背包容量  及 c 的大小。  c=10
  
  System.out.print("请输入背包的容量:");
  
      int capacity = sc.nextInt();
  
  
   //3.分别输入n个物品的重量。   1 4 2 5 2.
  
  System.out.print("请分别输入每个物品的重量:");
  
      int[] weight = new int [5];
  
      for(int i=0 ; i<5 ; i++) {
    
    weight[i] = sc.nextInt();
      
  }
  
   //4.按序输入n个物品的价值。   1 6 5 3 1.
  
  System.out.print("请分别输入每个物品的价值:");
  
       int[] value = new int [5];
  
     for(int i=0 ; i<5 ; i++) {
    
    value[i] = sc.nextInt();
    
    
   }
     
     System.out.println("最大价值为:" + zero(type,capacity,weight,value));
        
    

      

         //5.最终调用01背包方法输出最优解。
  public static int zero(int n , int w , int[] weight , int[] value ) {
       int[][]dp= new int[n+1][w+1];//注意为什么要加一,因为:下面的i 和 j 都是从1开始的. 
        
    for(int i = 1 ; i<=n ; i++) {
          int w1 = weight[i-1];//这两个是为了让数组下表从0开始所以要减一。
          int v = value[i-1];    
        for(int j = 1 ; j<=w ; j++) {
         
         if(w1 > j) {
           
           dp[i][j] = dp[i-1][j];
           continue;
         }
         dp[i][j] = Math.max(dp[i-1][j] , dp[i-1][j-w1]+v);
          } 
       }
       return dp[n][w];         
  }
.
}

            注意在写这种问题的时候要注意先一条一条的列出需求然后一个一个在需求里面进行补充。

                 这个样子写有助于提高做题思路,可以让自己的程序思想更加清晰。

                   我用的是 eclipse  

              
-----------------------------------
©著作权归作者所有:来自51CTO博客作者初学java的小菜的原创作品,请联系作者获取转载授权,否则将追究法律责任
java  01背包 清晰源代码   eclipse  idea  
https://blog.51cto.com/u_15831800/5807224

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值