poj3045Cow Acrobats(贪心, 二分)

在CowAcrobats问题中,N只编号为1至N的奶牛计划通过垂直堆叠表演特技。每只奶牛具有特定的重量和力量,目标是确定一种排列方式,使得当所有奶牛站在彼此之上时,最大风险值(即奶牛可能崩溃的风险)最小化。此问题可通过将奶牛按其重量加力量的总和排序并计算累积重量来解决。

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

本是一道练习二分的题目。。 但是发现贪心可用。。。二分反而没想到。。

题目大意是奶牛要叠罗汉了(杂技) 。。 求最小化最大危险值,  危险值等于 一头奶牛上面所有的奶牛体重之和减去这头的力量值。

证明略了。。看到网上写了很多了。。 结果就是按照w+s排序

 

这道题应该也可以用二分来最小化最大值。。但是A了之后就不太想了哎。。。。

 

题目:

Cow Acrobats
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 2245 Accepted: 888

Description

Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away and join the circus. Their hoofed feet prevent them from tightrope walking and swinging from the trapeze (and their last attempt at firing a cow out of a cannon met with a dismal failure). Thus, they have decided to practice performing acrobatic stunts.

The cows aren't terribly creative and have only come up with one acrobatic stunt: standing on top of each other to form a vertical stack of some height. The cows are trying to figure out the order in which they should arrange themselves ithin this stack.

Each of the N cows has an associated weight (1 <= W_i <= 10,000) and strength (1 <= S_i <= 1,000,000,000). The risk of a cow collapsing is equal to the combined weight of all cows on top of her (not including her own weight, of course) minus her strength (so that a stronger cow has a lower risk). Your task is to determine an ordering of the cows that minimizes the greatest risk of collapse for any of the cows.

Input

* Line 1: A single line with the integer N.

* Lines 2..N+1: Line i+1 describes cow i with two space-separated integers, W_i and S_i.

Output

* Line 1: A single integer, giving the largest risk of all the cows in any optimal ordering that minimizes the risk.

Sample Input

3
10 3
2 5
3 3

Sample Output

2

Hint

OUTPUT DETAILS:

Put the cow with weight 10 on the bottom. She will carry the other two cows, so the risk of her collapsing is 2+3-3=2. The other cows have lower risk of collapsing.

Source

 
代码:
 1 #include <algorithm>
 2 #include <cstdio>
 3 #include <iostream>
 4 using namespace std;
 5 #define MAXN 50000+10
 6 #define LL long long
 7 #define min(x,y) x<y?x:y
 8 #define max(x,y) x<y?y:x
 9 int N;
10 
11 struct P
12 {
13     LL w,s;
14     bool operator < (const P& x) const
15     {
16         return (w+s)<(x.w+x.s);
17     }
18 };
19 
20 P cow[MAXN];
21 
22 
23 int main()
24 {
25     scanf("%d",&N);
26 
27     LL l =0 , r= 0;
28     for(int i=0;i<N;i++)
29     {
30         scanf("%lld%lld",&cow[i].w,&cow[i].s);
31     }
32     sort( cow,cow+N);
33     LL ans = -10000000000;
34     LL sum =0;
35     for(int i=0;i<N;i++)
36     {
37         ans = max( sum - cow[i].s, ans);
38         sum+= cow[i].w;
39     }
40     printf("%lld\n",ans);
41 
42     return 0;
43 }

 

转载于:https://www.cnblogs.com/doubleshik/p/3537542.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值