贪心算法之背包问题
根据物品是否能分割,将背包问题分为两种,一是0/1背包问题,物品只能选择放(1)或不放(0),这个问题通常用动态规划法来解,无法使用贪心算法求得最优解。二是普通的背包问题,一般称为背包问题,放入背包的物品可以进行分割。可利用贪心算法求得最优解。下面详细的看一下背包问题。
背包问题的贪心策略常见的有三种:
1.优先选择价值高的物品,这样可以保证装入背包的价值有效增长,但背包容量消耗过快。
2.优先选择重量小的物品,可以保证背包中装入尽可能多的物品,但物品的价值却不能保证有效增长。
3.结合物品的价值与重量,选择一个新的权重=价值/重量来衡量物品,优先装入权重大的,这样不仅能保证价值的有效增长,还能解决背包容量消耗过快的问题。
下面是代码实现(通俗易懂):
#include<iostream>
#define M 10000
using namespace std;
int main(){
int v;//背包容量
int rv;//剩余背包容量
int hValue;//当前背包物品的最大价值
int n;//物品数量
int weight;//物品重量
int value;//物品价值
int weights[M];//物品重量存放
int values[M];//物品价值存放
float p[M];//权重,即物品的价值/物品重量
cout << "请输入背包的容量:" << endl;
cin >> v;
cout << "请输入物品的数量:" <<