贪婪法解背包问题
来源:互联网 发布:流星网络电视apk安卓 编辑:程序博客网 时间:2024/06/06 18:13
背包问题分好多种!以下代码用于解决,背包必须装满,物品可以分割的情况。期望背包中物品价值最大。
#include<iostream>using namespace std;/*---------贪婪法解决背包问题-------总是对当前的问题做最好的选择,从局部最优到全局最优。先按物品效益、重量比值升序排序。然后每次选择比重大的物品装载,知道装满背包为止!*/struct goodinfo{float p; //物品效益float w; //物品重量float X; //物品该放的数量int flag;//物品编号};//按物品效益,重量比值做升序排列//插入排序void InsertSort(goodinfo goods[],int n){int i,j;for(j = 2;j<=n;j++){goods[0] = goods[j];i = j-1;while(goods[0].p>goods[i].p){goods[i+1] = goods[i];i--;}goods[i+1] = goods[0];}}void GreedyMethod(goodinfo goods[],float M,int n){int i,j;for(i = 1;i<=n;i++){goods[i].X = 0;}for(i = 1;i<n;i++){if(goods[i].w>M)break;goods[i].X = 1;M = M - goods[i].w;}if(i<=n)goods[i].X = M/goods[i].w;//按物品编号做降序排列for(j = 2; j<=n;j++){goods[0] = goods[j];i = j - 1;while(goods[0].flag<goods[i].flag){goods[i+1] = goods[i];i--;}goods[i+1] = goods[0];}cout<<"最优解为:"<<endl;for(i = 1;i<=n;i++){cout<<"第"<<i<<"件物品要放: ";cout<<goods[i].X<<endl;}}int main(){int i,n;float M;goodinfo *goods;cout<<"Please input the amount of goods and the bag's weight:"<<endl;cin>>n>>M;goods = new struct goodinfo[n+1];for(i = 1;i<=n;i++){goods[i].flag = i;cout<<"Please input weight and balance : "<<endl;cin>>goods[i].w>>goods[i].p;goods[i].p = goods[i].p/goods[i].w;//物品的效益,重量比}InsertSort(goods,n);GreedyMethod(goods,M,n);return 0;}
- 贪婪法解背包问题
- 背包问题(贪婪法)
- 贪婪法求解背包问题
- 背包问题(贪婪法)
- 贪婪法求普通背包问题
- 完全背包问题(贪婪法)
- 贪婪算法--背包问题详解
- 贪婪算法解决背包问题
- 贪婪算法解决背包问题
- 贪婪法之01背包问题 C语言
- 0-1背包(贪婪法)
- 贪婪算法之背包问题求解 (php 版)
- UESTC-31 饭卡---- 贪婪算法中的0-1背包问题
- 贪婪算法、递归计算、动态规划背包问题
- 贪婪算法————背包问题
- 贪婪方法——贪婪方法和动态规划的比较:背包问题
- “装箱”问题的贪婪法解决算法
- “装箱”问题的贪婪法解决算法
- Oracle中的分页存储过程
- android图片的内存优化
- android apk代码和xml资源文件反编译
- 陀螺仪
- hdu 1856 More is better
- 贪婪法解背包问题
- 我对SLA文档内容的小小理解
- fedora16 下安装 gcc4.7.1
- 内存管理之内存池的设计
- 黑马程序员_java编程基础02
- Java 中的 jndi
- POJ3006-Dirichlet's Theorem on Arithmetic Progressions解题报告
- 晨间日记
- android读取图片