王道机试2.6:贪心算法

背包问题代码实现:

#include<stdio.h>
#include<algorithm>
using namespace std;
struct goods
{
	double j;
	double f;
	double s;
	bool operator < (const goods &A) const{
		return s>A.s;
	}
}buf[1000];
int main(){
	double m;
	int n;
	while (scanf("%lf%d",&m,&n)!=EOF)
	{
		if (m==-1&&n==-1)
		{
			break;
		}
		for (int i = 0; i < n; i++)
		{
			scanf("%lf%lf", &buf[i].j, &buf[i].f);
			buf[i].s = buf[i].j / buf[i].f;
		}
		sort(buf, buf + n);
		int idx = 0;
		double ans = 0;
		while (m>0&&idx<n)
		{
			if (m>buf[idx].f)
			{
				ans += buf[idx].j;
				m -= buf[idx].f;
			}
			else
			{
				ans += buf[idx].j*m / buf[idx].f;
				m = 0;
			}
			idx++;
		}
		printf("%.3lf\n", ans);
	}
	return 0;
}

在这里插入图片描述
活动调度:

#include<stdio.h>
#include<algorithm>
using namespace std;
struct program
{
	int startTime;
	int endTime;
	bool operator < (const program & A) const{
		return endTime < A.endTime;
	}
}buf[100];
int main(){
	int n;
	while (scanf("%d",&n)!=EOF)
	{
		if (n == 0){
			break;
		}
		for (int i = 0; i < n; i++)
		{
			scanf("%d%d", &buf[i].startTime, &buf[i].endTime);
		}
		sort(buf, buf + n);
		int currentTime = 0, ans = 0;
		for (int i = 0; i < n; i++)
		{
			if (currentTime<=buf[i].startTime)
			{
				currentTime += buf[i].endTime;
				ans++;
			}
		}
		printf("%d\n", ans);
	}
	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值