[USACO1.3]混合牛奶 Mixing Milk

【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 }

 

posted @ 2019-09-25 00:15  GTR_PaulFrank  阅读(210)  评论(0编辑  收藏  举报