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