算法随笔一(背包问题)

今天逛园子,偶然看到了“背包问题”,于是上网找了下相关资料,并写了个简单的实现方案。

何为背包问题?

简单理解,就是给了一堆物品跟一个包,每个物品都有相应的重量和价值,包有自己的承重。我们要做的就是在包的承重范围内,往包里装下价值总量最高的物品。

如何解决背包问题?

一般采用递归的方法,对每次放入物品进行数学建模。每次放入物品都会有两种选择(前提是该物品能放入):

1. 放入该物品,那么问题转换成,减去该物品的重量,包剩余的容量最多能装下多少价值的物品。

2. 不放入该物品,那么问题转换成,算上该物品的重量,包的容量最多能装下多少价值的物品

为了方便理解,可以参考以下表格(首行为包的容量):

重量012345678910价值
2005555555555
50055566111111116
30055666111111121
700556661616212116
800556661616212110

 

 

 

 

 

拿数据部分,第四行第八列的数据来说

如果放入物品三,则最高价值为1(物品三价值)+5(承重为4时的最高价值)=6。

如果不放入物品三,则最高价值为11(承重为7时放入前面物品的最高价值)

代码如下:

物品类

public class BagItem
{public int Weight { get; set; }public int Value { get; set; }
}

背包类

public class Bag
{private List<BagItem> _items;private int _capacity;public Bag(List<BagItem> items,int capacity){this._items = items;this._capacity = capacity;}public int CalculateMaxValue(){int n = _items.Count;int[,] array = new int[n + 1, _capacity + 1];for (int i = 0; i < n + 1; i++){array[i, 0] = 0;}for (int i = 0; i < _capacity + 1; i++){array[0, i] = 0;}for (int i = 1; i < n + 1; i++){for (int j = 1; j < _capacity + 1; j++){if (_items[i-1].Weight > j){array[i, j] = array[i - 1, j];}else{array[i, j] = Math.Max((_items[i-1].Value + array[i - 1, j-_items[i-1].Weight]), array[i - 1, j]);}}}return array[n, _capacity];}
}

背包问题的实现就写到这。

转载于:https://www.cnblogs.com/alaskii/p/6142368.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js Array扩展方法

Object.extend function (destination, source) { /// <summary> /// 扩展对象方法 /// </summary> for (var property in source) { destination[property] source[property]; } return destination;} Object.extend(Array.prototype, { …

c语言编程求5的阶乘传统流程图,C语言算法第五源代码以及流程图.doc

C语言算法第五源代码以及流程图程序流程图 内存 执行过程 数计学院计算机科学与技术 110座机电话号码6戴晨丹1 /* example5-3.cpp */2 #include3 Int main45 Intx,y, max;6 printf “请输入两个整数:” ;7 scanf “%d%d”, &x, &y ;8 If x y9 max x;10 else11 max y;12…

为什么人会摆高姿态_为什么感情相处中不要随意掏心掏肺?

如今已经到了十二月份&#xff0c;过年的时间一点一点推进&#xff0c;在这个冬天你这一年的感悟有多少&#xff1f;这一年过得还快乐吗&#xff1f;可能有人在这一年遇到了自己的另一半&#xff0c;彼此陪伴走过四季&#xff0c;沉浸在爱情的蜜罐里&#xff0c;感受荷尔蒙碰撞…

js List 对象封装【原创】

var List function (arr) {/// <summary>/// 加载数组列表/// </summary>/// <returns type"List" />/// <param name"arr">数组</param>return List.fn.Load(arr);};List.fn List.prototype {/// <summary>/// 加…

图论——汉密顿图

http://blog.csdn.net/u013534883/article/details/23952321转载于:https://www.cnblogs.com/dk666/p/6144473.html

c语言常考的程序,复试C语言常考趣味程序方案.doc

复试C语言常考趣味程序方案狼追兔子1巧夺偶数2五猴分桃3高次方数4借书方案5过桥问题6数制转换7打渔晒网8喝酒问题9哥德巴赫猜想10打印日历11抓交通肇事逃逸犯12反序数13新郎新娘14称重砝码15求车速16谁是窃贼17出售金鱼18百钱百鸡19谜语博士20猜牌术(&#xff0d;)21舍罕王的失…

js 页面所有超链接后加随机数 基于jquery

避免了页面缓存问题。rand Math.random();$("a").each(function () {href $(this).attr("href");if (href.length 0 || href.indexOf("javascript") > -1) return;else if (href.indexOf("?") > -1) {$(this).attr("hr…

mcinabox运行库下载_mcinabox运行库

mcinabox运行库是一个可以让你在手机上运行我的世界java版的工具&#xff0c;如果你想要在手机上玩java版我的世界&#xff0c;可以试试这款工具。这款运行库是在手机上玩java版我的世界必安装的&#xff0c;就像windows系统上的运行环境一样&#xff0c;不安装这个是没法玩jav…

hadoop 2.7.2 + zookeeper 高可用集群部署

一&#xff0e;环境说明 虚拟机&#xff1a;vmware 11 操作系统&#xff1a;Ubuntu 16.04 Hadoop版本&#xff1a;2.7.2 Zookeeper版本&#xff1a;3.4.9 二&#xff0e;节点部署说明 三&#xff0e;Hosts增加配置 sudo gedit /etc/hosts wxzz-pc、wxzz-pc0、wxzz-pc1、wxzz-pc…

js jquery Ajax同步

Ajax请求默认的都是异步的 如果想同步 async设置为false就可以&#xff08;默认是true&#xff09; var html $.ajax({ url: "some.php", async: false }).responseText; 或者在全局设置Ajax属性 $.ajaxSetup({ async: false }); 再用post&#xff0c;get…

c语言cgi函数库,cgic: 为C语言编写CGI的C函数库

CGIC介绍怎样写CGIC应用程序怎样产生图片在CGIC中?CGI调试特征: 利用捕获cgic函数参考cgic变量参考cgic结果编码参考cgic快速索引一般的Unix系统都支持ANSIC,增加相应的库函数(和相应的h文件)就可以实现CGI。在此我向大家推荐一个用于CGI编程的ANSIC库:cgic。cgic是用来生成基…

python3交互模式下 按上翻箭头显示乱码_CentOS 6.3中,Python-2.7.3交互模式下方向键、退格键等出现乱码...

CentOS 6.3中&#xff0c;Python-2.7.3交互模式下方向键、退格键等出现乱码#安装readline-devel# yum install readline-devl#重新安装python1. 准备工作下载源码包如果没有安装make工具~#rpm -qa|grep makeyum -y install gcc automake autoconf libtool make安装zlibyum inst…

C#实现插入排序法

private int[] test_Insertion(int[] list) //插入排序 传入数组 3, 6, 2, 1, 9, 5, 4, 7 {for(int i 1;i<list.Length;i) //首选取出第一个数&#xff08;3&#xff09;作为一个有序的数组&#xff0c;然后遍历传入数组"3"之后的每一个数{int j ;int key list[…

c3d怎么调语言,falc3d参数调整心得

对于flac3d我是一个菜鸟级新手&#xff0c;刚接触flac3d没几天就要用来做东西&#xff0c;其中的艰辛实在不足为外人道也。不过菜鸟在前进&#xff01;随着使用的次数增多&#xff0c;对于flac的认识也增多了不少&#xff0c;虽然里精通还有十万八千里&#xff0c;但小小的心得…

nvidia驱动崩了 ubuntu_Ubuntu 16.04安装nVidia驱动失败!

Ubuntu 16.04安装nVidia驱动失败&#xff01;发布时间:2016-09-16 10:24:00来源:红联作者:sutao80216我的笔记本是I/N双显卡&#xff0c;CPU是i7&#xff0c;独显是nVidia GEFORCE GT520M&#xff0c;从Ubuntu 13版本系列开始&#xff0c;安装nVidia的独显驱动从来没有成功过&a…

sql 数字转换为16进制数函数

create function [dbo].[IntToHex](num int)returns varchar(100)asbegindeclare re varchar(100)set rewhile num>0select resubstring(0123456789ABCDEF,num%161,1)re,numnum/16return(re)end

移动端REM布局方案

引用http://www.w3cplus.com/mobile/lib-flexible-for-html5-layout.html的方案 下载地址https://github.com/hupan508/lib-flexible 注意点。 1、如果html设置过 meta &#xff0c;js将使用meta 标签的缩放。 <meta http-equiv"X-UA-Compatible" content"I…

c语言插件实现原理,C语言实现插件机制

现在越来越多的软件项目都提供插件机制&#xff0c;这样使得软件的扩展性大大增强&#xff0c;那么到底插件机制的实现是怎么样的呢&#xff1f;在这里只谈论C语言的实现&#xff0c;其实C语言实现插件的例子也很多&#xff0c;像mjpg-streamer就是将输入输出做成插件&#xff…