poj1456 结构体排序+贪心

本文探讨了如何在限定时间内,通过优先选择高价值且在有效期内的商品进行出售,实现最大利润的策略。通过排序和贪心算法,解决商品销售问题。

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

题意:给出很多商品,每个商品有价值和出售期限,只能在期限内出售才能获取利润,每一个单位时间只能出售一种商品,问最多能获得多少利润。

只需要按照优先价值大的,其次时间长的排序所有物品,然后贪心选择,从它可以选的时间开始往前遍历,如果某个时间点没有出售过商品,那就放在那个时间出售,就这样就行。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 struct work{
 7     int p,d;
 8     bool operator<(work a)const{
 9         if(p==a.p)return d>a.d;
10         return p>a.p;
11     }
12 }w[10005];
13 
14 bool t[10005];
15 
16 int main(){
17     int n;
18     while(scanf("%d",&n)!=EOF){
19         int i,j;
20         memset(t,0,sizeof(t));
21         for(i=1;i<=n;i++)scanf("%d%d",&w[i].p,&w[i].d);
22         sort(w+1,w+n+1);
23         int ans=0;
24         for(i=1;i<=n;i++){
25             for(j=w[i].d;j>=1;j--){
26                 if(!t[j]){
27                     ans+=w[i].p;
28                     t[j]++;
29                     break;
30                 }
31             }
32         }
33         printf("%d\n",ans);
34     }
35     return 0;
36 }
View Code

 

转载于:https://www.cnblogs.com/cenariusxz/p/4790155.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值