标签:
题意:给出很多商品,每个商品有价值和出售期限,只能在期限内出售才能获取利润,每一个单位时间只能出售一种商品,问最多能获得多少利润。
只需要按照优先价值大的,其次时间长的排序所有物品,然后贪心选择,从它可以选的时间开始往前遍历,如果某个时间点没有出售过商品,那就放在那个时间出售,就这样就行。
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 }
标签:
原文地址:http://www.cnblogs.com/cenariusxz/p/4790155.html