代码改变世界

随笔分类 -  算法---贪心法

贪心 单源最短路径

2013-08-16 22:29 by youxin, 800 阅读, 收藏, 编辑
摘要: 最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 算法具体的形式包括: 确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。适合使用Dijkstra算法。 确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路 阅读全文

贪心法 背包问题求解

2013-08-16 21:07 by youxin, 1462 阅读, 收藏, 编辑
摘要: 我们有n种物品,物品j的重量为wj,价格为pj。我们假定所有物品的重量和价格都是非负的。背包所能承受的最大重量为W。如果限定每种物品只能选择0个或1个,则问题称为0-1背包问题。可以用公式表示为:最大化受限于如果限定物品j最多只能选择bj个,则问题称为有界背包问题。可以用公式表示为:最大化受限于如果不限定每种物品的数量,则问题称为无界背包问题。各类复杂的背包问题总可以变换为简单的0-1背包问题进行求解。现在我们可以分为2类:即物体可以分割的背包问题及物体不可分割的背包问题,把后者成为0/1背包问题。注:贪心法只能求解可分割的背包问题,如果不分割,求的不一定是最优解。代码如下:/******** 阅读全文

贪心法 货币支付问题或找零问题

2013-08-16 16:23 by youxin, 6423 阅读, 收藏, 编辑
摘要: 已知,中华人民共和国的纸币面额分别为:100元、50元、20元、10元、5元、2元、1元,输入钱数,输出最小的货币方案。#includeusing namespace std;int denomination[7]={100,50,20,10,5,2,1};int giveChange(int money,int (*result)[2]){ int k=0; int sum=0; for(int i=0;i 0) { sum+=money/denomination[i] * denomination[i]; ... 阅读全文

贪心算法简介

2013-08-16 15:25 by youxin, 1347 阅读, 收藏, 编辑
摘要: 在实际生活中,经常有这样一类问题:它有n个输入,它的解由这n个输入中的一个子集组成,但这个子集必须满足事先给定的某些条件,有时,把这些条件称为约束条件,把满足约束条件的解称为可行解。满足约束条件的解可能不止一个,因此可行解也不是唯一的。为了衡量可行解的优劣,事先给出一定的标准,这些标准通常以函数的形式给出,把这些函数称为目标函数。使目标函数取极值(极大或极小)的可行解,称为最优解。如下面的货币兑付问题:有2^n个不同的向量,把所有这些向量称为问题的解空间。贪婪法设计思想:贪婪法通常用来解决具有最大值和最小值的优化问题,它犹如登山一样,一步一步地向前推进,从某一个初始状态出发,根据当前局部的而不 阅读全文

高精度整数去位取最小问题

2012-04-13 11:43 by youxin, 953 阅读, 收藏, 编辑
摘要: Description键盘输入一个高精度的正整数N,去掉其中任意M个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和M寻找一种方案使得剩下的数字组成的新数最小。输出组成的新的正整数。(不超过240位)输入数据均不需判错。如果去掉了某几个位后得到的新整数开头为0,保留0。Input本题有多组测试数据,每组测试数据占一行。一个高精度正整数N(N不超过240位)一个正整数M。(M为不大于N的长度的正整数)N,M由一个空格分开。Output新的正整数,每组数据的输出占一行。不要多余的空白.Sample Input456547 1 456547 2 456547 3 7773359 2 阅读全文
点击右上角即可分享
微信分享提示