特点是每种物品只有一件,可以选则放或不放,
有i件物品,每件物品的重量是w[i],价值是v[i];给定一个包,这个包最大支持重量为AW;
问题是要怎么放这些物品能使包中的总价值最大;
给一个实例看的更懂些:
有三件物品:
重量依次为:15,18,10
价值依次为:24,25,15
贪心算法分析
首先要找到贪心的原则:
第一种原则:以重量最轻(即将重量最轻的物品依次放入包中,直到超出包的限制就停止放入了);
第二种原则:以价值最大(即将价值最大的物品依次放入包中,直到超出包的限制就停止放入了);
第三种原则:以单位价值(即单位重量所含价值大的物品先放,直到超出包的限制就停止放入了);
如何选择正确的原则?
1.建立数学模型来描述问题。
2.把求解的问题分成若干个子问题。
3.对每一子问题求解,得到子问题的局部最优解。
4.把子问题的解局部最优解合成原来解问题的一个解。
贪心算法核心思想:点击打开》
这个问题其实很容易看出选择第三年中原则。
这个例子代码:
#include<stdio.h>
#include<malloc.h>
void package0_1(int n,float c,float v[],float w[]);
int main()
{
int n = 3; //物品件数
float c = 20; //包的最大承受重量
float v[] = {24,15,25}; //按照单位价值降序排列
float w[] = {15,10,18};
package0_1(n,c,v,w);
return 0;
}
void package0_1(int n,float c,float v[],float w[])
{
int i;
for(i=0;i<n;i++)
{
if(w[i] > c)
break;
c = c - w[i];
printf("放入第%d件物品\n",(i+1));
}
}
未完待续....