-->
当前位置:首页 > 题库 > 正文内容

程序填空题:部分背包问题(贪心法)

Luz4年前 (2021-06-19)题库1413
设有编号为1、2、…、n的n个物品,它们的重量分别为w1、w2、…、wn,价值分别为v1、v2、…、vn,其中wi、vi(1≤i≤n)均为正数。
 有一个背包可以携带的最大重量不超过W。求解目标:在不超过背包负重的前提下,使背包装入的总价值最大。

```c++
#include 
#include 
#include 
#include 
using namespace std;
#define MAXN 51
//问题表示
int n;
double W;					//限重
struct NodeType
{   int no;
	double w;
	double v;
	double p;					//p=v/w
	float x;
	bool operator<(const NodeType &s) const
	{
		return p>s.p;			//按p递减排序
	}
};
NodeType A[MAXN]={{0}};	//下标0不用
//求解结果表示
double V;						//最大价值
bool cmp(const NodeType &a,const NodeType &b)
{
	return a.no0)				//当余下重量大于0
	{	A[i].x=;
		V+=A[i].x*A[i].v;			//累计总价值
	}
}

int main()
{   cin>>n>>W;
    for(int i=1;i<=n;i++)
    {
    	cin>>A[i].no>>A[i].w>>A[i].v;A[i].x=0;
	}
	for (int i=1;i<=n;i++)			//求v/w
		A[i].p=A[i].v/A[i].w;
	sort(A+1,A+n+1);				//排序
	Knap();
    sort(A+1,A+n+1,cmp);
	for(int j=1;j<=n;j++)
		cout<
答案: 第1空:A[i].w<=weight 第2空:weight-=A[i].w 第3空:i++ 第4空:weight/A[i].w


发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。