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

背包问题 * 贪心准则:价值密度贪心

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

背包问题 * 贪心准则:价值密度贪心

代码

package LQB14;

import java.util.Scanner;


public class T9 {

		public static float C1 = 0;// 总价值

		public static void main(String[] args) {
			// TODO Auto-generated method stub
			Scanner scanner = new Scanner(System.in);
			System.out.print("请输入物品的个数:");
			int n = scanner.nextInt();
			System.out.print("请输入背包的容量:");
			float C = scanner.nextFloat();
			System.out.println("请输入物品的重量和价值:");
			float[] wi = new float[n + 2];
			float[] vi = new float[n + 2];
			float[] x = new float[n + 2];
			float[] v2 = new float[n + 1];
			float[] w2 = new float[n + 1];
			for (int i = 1; i <= n; i++) {
				wi[i] = scanner.nextFloat();
				vi[i] = scanner.nextFloat();
				v2[i] = vi[i];
				w2[i] = wi[i];
			}
			T9 test = new T9();
			test.Knapsack(n, C, vi, wi, x, v2, w2);
			System.out.println();
			System.out.print("单个物品价值:");
			for (int i = 1; i <= n; i++) {
				System.out.print("t" + v2[i]);
			}
			System.out.println();
			System.out.println("背包的总价值为:" + C1);
		}

		
		void Sort(int n, float[] v, float w[]) {
			float temp1;
			float temp2;
			for (int i = 1; i <= n; i++) {
				for (int s = 1; s <= i; s++) {
					if (v[i] / w[i] > v[s] / w[s]) {
						temp1 = v[s];
						temp2 = w[s];
						v[s] = v[i];
						w[s] = w[i];
						v[i] = temp1;
						w[i] = temp2;

					}
				}
			}
		}

		void Knapsack(int n, float W, float v[], float w[], float x[], float v2[], float w2[]) {
			T9 a = new T9();
			a.Sort(n, v, w);
			int i;
			for (i = 1; i <= n; i++)
				x[i] = 0;
			float c = 0;

			for (i = 1; i <= n; i++) {
				if (w[i] > W)
					break;// 如果物品的重量大于背包剩余容量,停止放入整个物品
				for (int t = 1; t <= n; t++) {
					if (w[i] == w2[t] && v[i] == v2[t])// 将放入了的物品标记为1
						x[t] = 1;
				}
				W -= w[i];
				c += v[i];
			}
			if (i <= n) {
				for (int q = 1; q <= n; q++) {
					if (w[i] == w2[q] && v[i] == v2[q]) {
						x[q] = W / w[i];// 放入部分物品记录放入的比例
						c += x[q] * v[i];
					}
				}

			}
			System.out.print("放入重量比例:");
			for (int k = 1; k <= n; k++) {
				System.out.print("t" + x[k]);
			}
			C1 = c;
		}
	
	}



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

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

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