POJ 3045 Cow Acrobats (最大化最小值)

题目链接click here~~

【题目大意】

给你n头牛叠罗汉。每头都有自己的重量w和力量s,承受的风险数rank就是该牛上面全部牛的总重量减去该牛自身的力量,题目要求设计一个方案使得全部牛里面风险最大的要最小。

【解题思路】:依照w+s贪心放置,越大的(注意是w+s之和)越在以下。不难证明:假设最优放置时。相邻两头牛属性分别为w1,s1,w2,s2,第一头牛在第二头上面,sum为第一头牛上面的牛的体重之和。那么第一头牛风险:rank1=sum-s1;第二头牛风险:rank2=sum+w1-s2;交换两头牛位置之后 rank1‘=sum+w2-s1,rank2‘=sum-s2,因为是最优放置,所以w2-s1>=w1-s2。即w2+s2>=w1+s1,所以和最大的一定在最以下!因此排序。推断就可以!

代码:

//#include <bits/stdc++.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
const int N=1e6+10;
long long  num[N];
long long  n,m,k;
struct node
{
    long long  sum ,w,s;
} pp[N];
bool cmp(node a,node b)
{
    return a.w+a.s<b.w+b.s;//坑啊!

!!
}
int main()
{
    //freopen("1.txt","r",stdin);
    scanf("%lld",&n);
    for(int i=1; i<=n; i++)
    {
        scanf("%lld%lld",&pp[i].w,&pp[i].s);
    }
    sort(pp,pp+n+1,cmp);
    pp[1].sum=0;
    for(int i=2; i<=n; i++)
    {
        pp[i].sum=pp[i-1].sum+pp[i-1].w;
    }
    long long maxx=-1e10;
    for(int i=1; i<=n; i++)
    {
        maxx=max(pp[i].sum-pp[i].s,maxx);
    }
    printf("%lld\n",maxx);
    return 0;
}
时间: 2024-08-06 16:52:24

POJ 3045 Cow Acrobats (最大化最小值)的相关文章

POJ 3045 Cow Acrobats (想法题)

题目链接:POJ 3045 Cow Acrobats 题意:有n只牛叠罗汉,危险指数的计算是 该层牛以上的牛重量总和减去这层牛的强度,求使最大的危险指数中的最小值. 思路:根据w+s排序,最大的在最下面,道理很简单,危险指数: sum-(w+s),(sum该层牛以上的牛重量总和). AC代码: #include<stdio.h> #include<string.h> #include<algorithm> #define ll __int64 using namespa

poj 3045 Cow Acrobats(数学题)

题目链接:http://poj.org/problem?id=3045 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

poj 3045 Cow Acrobats(二分搜索?)

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 ca

POJ 3045 Cow Acrobats

传送门:http://poj.org/problem?id=3104 题意: 烘干所有的衣服,在自然晾干每分钟可以减少1单位的水分,在烘干机里面每分钟减少k单位的水分, 一件衣服可以烘干一部分水分,也可以自然晒干一部分水分. 解题思路: 在代码中. 实现代码: #include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int MAXN=100000; con

POJ - 3045 Cow Acrobats 贪心

题目大意:有N头牛要叠罗汉,每头牛都有相应的重量和力量. 叠罗汉是有危险的,每头牛的危险系数为该牛上面的牛的重量的和减去该牛的力量 问如何安排这个叠罗汉顺序,使得危险系数最大的那头牛的危险系数最小 解题思路:最大值的最小值,用二分?二分当然也可以,但是有更简便的方法 假设第i头牛的重量为wi,力量为si,第j头牛的重量为wj,力量为sj,第i头牛上面的牛的重量和sum 先考虑第一种情况,第i头牛叠到第j头牛的上面 那么 a1 = sum -si, b1 = sum + wi -sj 考虑第二种情

POJ3045 Cow Acrobats —— 思维证明

题目链接:http://poj.org/problem?id=3045 Cow Acrobats Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5713   Accepted: 2151 Description Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away and join the circus. The

poj 2456 Aggressive cows,二分,最大化最小值

描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000,000,000). 但是,John的C (2 <= C <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗.为了不让牛互相伤害.John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢? 输入 有多组测试数据,以EOF结束. 第

poj 2456 二分法 最大化最小值

题目:http://poj.org/problem?id=2456 重新练习下二分法,发现还是手速不够 从这道题学到一下几点: 1.线性分几段的方法,看我的Judge()代码: 2.二分的while()最终打印的是down,而不是mid(我代码里写的是ans),或者up, 这么想:跳出循环的时候,假设while里的判断,Judge(ans)==1,那么down是正确解,up不是 Judge(ans)==0,那么ans跟up都不是正确解 综上,打印down才能输出正确解 3.调了好一会二才发现的b

【贪心专题】POJ 2456 Aggressive cows &amp;&amp; NYOJ 586 疯牛(最大化最小值 贪心+二分搜索)

链接: click here~~ 题意:农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000,000,000). 但是,John的C (2 <= C <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗.为了不让牛互相伤害.John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢? [解题