背包问题(KnapSack Problem)的相关算法是常用的规划算法。

一、什么是背包问题?

背包的问题是,你有一个“袋子”,可以装有限数量的物品,鉴于你有一组物品可以从每个物品中选择,每个物品都有各自的“价值”,你如何才能最大限度地只装最有价值的物品呢。

让我们以现实世界为例。一个强盗闯入一家珠宝店,想偷珍贵的珠宝。他的背包只能装50公斤重(他是超人)。当他在商店里走来走去想偷什么的时候,他必须在脑子里做一个“成本/收益”的总和,以最大限度地提高他的总收入。举个例子,用一个50公斤的袋子,偷一件价值100美元的50公斤物品,还是偷五件价值50美元的10公斤物品更好?显然是后者,因为即使一件物品更有价值,它也会占据袋子里的所有空间,而偷多件较小的物品实际上会使袋子的价值最大化。这就是背包问题。

下载完整的工程文件源代码:

下载源代码https://download.csdn.net/download/beijinghorn/85078706

二、背包问题(Knapsack Problem)贪心算法的C#源代码

1、核心代码

using System;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{public class Jewel{public int Weight { get; set; }public int Value { get; set; }}public static class KnapSack_Algorithm{public static int MaxCapacity(int bagCapacity, int[] weights, int[] values)//{List<Jewel> jewels = new List<Jewel>();for (int i = 0; i < weights.Length; i++){Jewel jewel = new Jewel();jewel.Weight = weights[i];jewel.Value = values[i];jewels.Add(jewel);}int itemCount = jewels.Count;int[,] matrix = new int[itemCount + 1, bagCapacity + 1];for (int i = 0; i <= itemCount; i++){for (int w = 0; w <= bagCapacity; w++){if (i == 0 || w == 0){matrix[i, w] = 0;continue;}var currentJewelIndex = i - 1;var currentJewel = jewels[currentJewelIndex];if (currentJewel.Weight <= w){matrix[i, w] = Math.Max(currentJewel.Value + matrix[i - 1, w - currentJewel.Weight], matrix[i - 1, w]);}else{matrix[i, w] = matrix[i - 1, w];}}}return matrix[itemCount, bagCapacity];}}
}

2、显示代码

using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;using Legalsoft.Truffer.Algorithm;namespace Knapsack
{public partial class Form1 : Form{public Form1(){this.StartPosition = FormStartPosition.CenterScreen;InitializeComponent();}private void Form1_Load(object sender, EventArgs e){this.Text = "C#,背包问题的KnapSack算法——北京联高软件开发有限公司";label1.Text = "Weights:";label2.Text = "Values:";label3.Text = "bagCapacity:";button1.Text = "KnapSack";button1.Cursor = Cursors.Hand;panel1.Dock = DockStyle.Top;panel2.Dock = DockStyle.Fill;textBox1.Text = "50,80,110,230";textBox2.Text = "10,20,30,40";textBox3.Text = "260";}private int[] String2Array(string str){string[] ws = str.Trim().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);int[] array = new int[ws.Length];for (int i = 0; i < ws.Length; i++){if (Int32.TryParse("0" + ws[i], out int wv)){array[i] = wv;}}return array;}private void button1_Click(object sender, EventArgs e){if (Int32.TryParse(textBox3.Text, out int bagCapacity)){string result = "MaxTotalValue=" + KnapSack_Algorithm.MaxCapacity(bagCapacity, String2Array(textBox1.Text), String2Array(textBox2.Text));webBrowser1.DocumentText = result;}}}
}

--------------------------------------------

POWER BY TRUFFER.CN

C#,背包问题(Knapsack Problem)贪心算法的源代码相关推荐

  1. 【Gym 102893 L】The Firm Knapsack Problem (贪心)

    题目链接 题目大意 一个 01 背包问题,物品数 n≤105n\le 10^5n≤105 ,容量 W≤1012W\le 10^{12}W≤1012 .将体积上限放宽到 32W\frac{3}{2}W2 ...

  2. 贪心算法 背包问题 java_贪心算法解背包问题

    背包问题:与0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1 <= i <= n.这2类问题都具有最优子结构性质,极为相似,但背包问 ...

  3. 贪心算法 背包问题 java_贪心算法求解背包问题

    一.贪心算法 1.贪心算法概念 贪婪算法(Greedy algorithm)是一种对某些求最优解问题的更简单.更迅速的设计技术.用贪婪法设计算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测 ...

  4. 背包问题贪心算法求解

    题目 有一个背包,背包容量是M=150.有7个物品,物品可以分割成任意大小. 要求尽可能让装入背包中的物品总价值最大,但不能超过总容量. 思路 具有最优子结构性质和贪心选择性质.只要是所有物品的总重量 ...

  5. python贪心算法几个经典例子_关于贪心算法的一些探讨、经典问题的解决和三种典型的贪心算法算法(哈弗曼,Kruskal,Prim)的Python实现。...

    贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解. 贪心算法不是对所有问题都能得到整体最优解,关键是 ...

  6. 嵌入式必会!C语言最常用的贪心算法就这么被攻略了

    01 基本概念 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的 ...

  7. lru调度算法例题_嵌入式必会!C语言最常用的贪心算法就这么被攻略了

    01 基本概念 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的 ...

  8. 算法设计与分析 贪心算法

    这里写自定义目录标题 贪心算法 贪心算法解0-1背包问题的错误 贪心算法 贪心算法与动态规划算法相同的是对于要求解的问题都具有最优子结构. 贪心算法的基本要素是:贪心选择性和最优子结构. 贪心算法的思 ...

  9. 算法导论之贪心算法(Huffman编码和拟阵)

    贪心算法,在解决最优化问题上,通过得到子问题的局部最优解来合成问题的一个解,以局部最优选择来输出一个全局最优解. 问题要用贪心算法来求解,需满足和动态规划一样的最优子结构特征,同时还需要再每个子问题最 ...

最新文章

  1. 华为路由器静态路由配置
  2. [翻译]Silverlight2 RC版本发布
  3. PPT 下载 | 神策数据朱静芸:消费者全渠道精细化运营方案
  4. 改进博客园Markdown显示功能(加代码行号、显示代码所用编程语言)
  5. 淘宝秒杀系统设计的几个注意点
  6. mysql外键猫头,SQL进阶
  7. “驱动能力”是什么意思???
  8. AS开发者转LAYA一周心得
  9. Windows 7,无法访问internet,DNS无响应
  10. python数据包pandas_python | 数据分析(二)- Pandas数据包
  11. 【HDU 5033】【经典单调栈问题】Building
  12. 软考—程序设计语言—有限自动机、正规式、编译程序基础、语法树、解释程序基础
  13. PG in not in系列方案比较
  14. word论文公式加点
  15. 故障排查——CPU使用率过高
  16. 2020中国边缘计算企业20强
  17. 2018ACM-ICPC焦作站E题Resistors in Parallel
  18. 不同CPU的MATLAB性能表现的简单对比方法
  19. mac下编译android下libaac,Mac系统下编译FFmpeg(支持libx264)for iOS
  20. 对公账户:企业银行结算账户

热门文章

  1. Python:迭代函数系统(IFS)
  2. MSN.com 改版, 翻译自Stopdesign
  3. p8z java快速命名工具
  4. 有效减小虚拟机占的内存
  5. 怎么制作CHM格式电子书
  6. 基于PHP+MySQL的汽车在线销售系统
  7. 简单的dnf增幅模拟器
  8. 今日公益明星排行榜--百度搜索风云榜
  9. 数字图像处理复习笔记
  10. 企业支付宝/个人支付宝支付收款码在线生成API源码