【timegate】 https://www.luogu.org/problem/P1208 【解题思路】 先按照 单价 排序, 单价小 的在前面; 单价 一样 的就把 产量多 的放前面;(我是用 结构体 做的,排序方便) 2,当还需要采购
【timegate】
https://www.luogu.org/problem/P1208
【解题思路】
先按照单价排序,单价小的在前面; 单价一样的就把产量多的放前面;(我是用结构体做的,排序方便)
2,当还需要采购时(n不为零),我们从当前还需采购值开始,挨个减一,总价钱加上当前最小单价,当这头牛产量为零(不能再从它购买时),换一头牛(数组加一),直到购买完(n=0)为止。
3,输出总价钱,等待评测,然后AC;
【code】
1 #include <cstdio>
2 #include <iostream>
3 #include <algorithm>
4 using namespace std; 5 int n,ans=-1<<30,sum; 6 struct Node{ 7 int x; 8 int y; 9 }a[100005]; 10 bool cmp(const Node &a,const Node &b){ 11 if(a.x==b.x)return a.y>b.y; 12 return a.x<b.x; 13 } 14 int main(){ 15 //freopen("3028.in","r",stdin); 16 //freopen("3028.out","w",stdout);
17 scanf("%d",&n); 18 int s,t; 19 for(register int i=1;i<=n;i++){ 20 scanf("%d%d",&s,&t); 21 a[i].x=s; 22 a[i+n].x=t; 23 a[i].y=1; 24 a[i+n].y=-1; 25 } 26 sort(a+1,a+n*2+1,cmp); 27 for(register int i=1;i<=n*2;i++){ 28 sum+=a[i].y; 29 ans=max(ans,sum); 30 } 31 printf("%d\n",ans); 32 return 0; 33 }