蓝桥杯——专题:贪心法(2017.3.4)

一、0-1背包问题

       装船问题

        某船最大载重量为m吨,现有n件货物供选择装船,每件货物的重量和价值不同。那么从这n件货物中挑选若干件上船,在满足货物总重量<=m的前提下,如何装船才能使运走的货物的总价值最大?

【分析】从价重比(价格/重量)入手,计算每件货物的价重比后,按价重比从大到小排序,在不超重的情况下从价重比最大的货物开始装船。贪心策略正体现在这一点。

源代码:

#include <stdio.h>
#define maxn 100
struct goods
{
	double w;             //货物重量
	double p;             //货物价值
	double pw;            //货物价重比
}g[maxn];
void sort(struct goods g[],int n)            //按货物价重比由大到小排序 
{
	int i,j;
	struct goods t;
	for(i=0;i<n-1;i++)
	{
		for(j=0;j<n-1-i;j++)
		{
			if(g[j].pw<g[j+1].pw)
			{
				t=g[j];
				g[j]=g[j+1];
				g[j+1]=t;
			}
		}
	}
}
int main()
{
	int i,j,n,m;
	double sumw,sump;                       //装上船的货物总重量和总价值 
	while(scanf("%d %d",&n,&m)!=EOF)
	{
		for(i=0;i<n;i++)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值