0
点赞
收藏
分享

微信扫一扫

java 01背包 清晰源代码 eclipse idea

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];
}

}

   运行  代码如下

java  01背包 清晰源代码   eclipse  idea  _按序


 



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

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

                   我用的是 eclipse  

              

     

            

        



        





举报

相关推荐

0 条评论