栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 动态规划 01背包 矩阵连乘

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 动态规划 01背包 矩阵连乘

java 动态规划 01背包 矩阵连乘
package sf;

import java.util.Arrays;
import java.util.Scanner;

//实验四,动态规划,0/1背包
public class knap {
	
public static void Knap(int v[], int w[], int c, int n, int m[][]) {
		
	
		int jMax = Math.min(w[n] - 1, c);   	
		//对二维数组初始化
		for (int j = 0; j <= jMax; j++)       
			m[n][j] = 0;
		for (int j = w[n]; j <= c; j++)        
			m[n][j] = v[n];                   
		for (int i = n - 1; i > 1; i--) {   
			jMax = Math.min(w[i] - 1, c);           // 先确定 0<= j c时的m[1][j]
		if (c >= w[1])                         //c>=w[1]时的m[1][j]
			m[1][c] = Math.max(m[1][c], m[2][c - w[1]] + v[1]);
	}
static void Traceback(int m[][], int w[], int c, int n, int x[]) {
	for (int i = 1; i < n; ++i) {
		if (m[i][c] == m[i + 1][c])
			x[i] = 0;
		else {
			x[i] = 1;
			c -= w[i];
		}
	}
	
	//m[n][c]不为0,x[n]赋值1,为0,赋值0
	if(m[n][c]>1) {
		x[n] =1;
	}
	if(m[n][c]==0) {
		x[n] =0;
	}
	     
}
public static void main(String[] args) {
	int []w=new int[101];
	int []v=new int[101];
	int []x=new int[6];
	int [][]m=new int[101][101];
	Scanner sc=new Scanner(System.in);
	System.out.println("输入背包容量:");
	int c=sc.nextInt();

	System.out.println("输入物品数量:");
	w[0]=sc.nextInt();
	v[0]=w[0];
	
	System.out.println("输入各物质量:");
	for (int i = 1; i <= w[0]; ++i) {
		w[i]=sc.nextInt();
	}
	
	System.out.println("输入各物品价值:");
	for (int i = 1; i <= w[0]; ++i) {
		v[i]=sc.nextInt();
	}
	
	Knap(v, w, c, w[0], m);
	Traceback(m, w, c, w[0], x);
	
	//System.out.println(Arrays.toString(x));
	System.out.println("选中的物品为1,未选中的为0:");
	for (int i = 1; i <= w[0]; ++i) {
		System.out.print(x[i]+" ");
	}
	System.out.println();
	System.out.println("总价值为:");
    System.out.println(m[1][c]);

}}


矩阵连乘

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/866670.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号