Poj 2586 解题报告

本文介绍了一种通过排序和贪心策略实现的商品销售计划算法,旨在寻找能在规定时间内完成销售并获得最大利润的方案。该算法适用于单个超市在有限时间内销售带有不同截止日期的商品场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一个超市有一个待售商品集合Prod,集合中每一个商品都有一个最晚销售时间,每一个产品都需要一个单独的单位时间销售(即两件商品不能同时销售),一个销售计划是一个有序子集SellSell<=Prod,根据子集中的顺序,每一个商品都能在规定时间前销售出去。一个销售计划的利润则为Sell中的所有商品的利润和。

比如,如果Prod={a,b,c,d},  (pa,da)=(50,2), (pb,db)=(10,1), (pc,dc)=(20,2), (pd,dd)=(30,1),其中p*表示商品*的价值,d*表示商品的最晚销售时间。比如一个销售计划Sell={d,a}d0开始1时刻结束销售,a1开始2时刻结束销售,所有商品都在规定时间前完成了销售,其利润为80,其他销售计划如下图:

写一个程序,来计算一个Prod的最大利润销售计划是多少利润。

 

输入:

一组数据以一个整数n0 <= n <= 10000)开始,接下来有npidi1 <= pi <= 10000 and 1 <= di <= 10000,数与数之间有空格隔开。

 

输出:

每组数据一行,输出最大利润是多少

 

样例输入:

50 2  10 1   20 2   30 1

7  20 1   2 1   10 3  100 2   8 2   5 20  50 10

 

样例输出:

80

185

 

题意:

只有在销售时间内售出的货物可以得到对应d的利润,同一时段只能卖一个货物,怎么得到最大利润

 

思路:(贪心)

将所有的利润进行排序,先让当前利润最高的货物在规定时间的最后一天卖出,如果规定时间被占(用一个visit数组来存时间是否被占用),则向前搜索没有被占用的时间,在那一天卖出此货物。

解释:因为题目并没有要求输出sell的顺序,只要求输出最大利润,所以只要保证利润大的卖出,且卖出时间越靠后可以让后面利润低的越有机会卖出。

 

注意:

1.       要用结构体来存一个货物的时间限制和利润。因为排序的时候会让他们的顺序混乱,不能一一对应

2.       读入的时候不知道有几组数据,所以要判定文件是否读完,即判定文件结束符‘EOF’

 

 

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std;
struct good{
	int p,d;
};
good a[20000];
bool cmp(good g,good h)
{
	if(g.p>h.p) return true;
	else if(g.p<h.p) return false;
	else if(g.p==h.p)
	{
		if(g.d>h.d) return true;
		else return false;
	}
}
int main()
{
	int n,visit[20000],tot;
	//freopen("good.txt","r",stdin);
	while(scanf("%d",&n)!=EOF)
	{
		
		memset(visit,0,sizeof(visit));
		tot=0;
		
		for(int i=1;i<=n;i++)
		{
			scanf("%d%d",&a[i].p,&a[i].d);
		}
		sort(a+1,a+n+1,cmp);
		for(int i=1;i<=n;i++)
		{
			if(!visit[a[i].d])
			{
				visit[a[i].d]=1;
				tot+=a[i].p;
			}
			else
			{
				for(int j=a[i].d;j>=1;j--)
				{
					if(!visit[j])
					{
						tot+=a[i].p;
						visit[j]=1;
						break;
					}
				}
			}
		}
		printf("%d\n",tot);
	}
}


 

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值