zoukankan      html  css  js  c++  java
  • Cow Acrobats [POJ3045] [贪心]

    Description

    农夫的N只牛(1<=n<=50,000)决定练习特技表演。 特技表演如下:站在对方的头顶上,形成一个垂直的高度。 每头牛都有重量(1 <= W_i <= 10,000)和力量(1 <= S_i <= 1,000,000,000)。奶牛崩溃的风险等同于她身上所有的奶牛的重量(当然不包括她自己)减去她的力量。你的任务是确定奶牛的顺序,从而使得所有牛的风险中最大的一个尽量小。

    Input

    第1行:一个整数N 第2 . .N+ 1行: 两个空格分隔的整数重量wi和力量si来描述奶牛i。

    Output

    一个整数,在所有牛的风险中最大的一个

    Sample Input

    3
    10 3
    2 5
    3 3

    Sample Output

    2

    Analysis

    这看上去很像贪心题,但是怎么贪呢?

    我们贪心时,如果对象多,而单独两个对象之间的差异对其他不影响,其他的也不对这两个对象有影响,就可以减少到两个方便分析。

    对于i,j,DiiWiiSiii,j邻。

    当i在j的上方时有当i在j的上方时有
    - Di=−Si①
    - Dj=Wi−Sj ②
    当j在i的上方时有当j在i的上方时有
    - Di=Wj−Si ③
    - Dj=−Sj④
    显然有②>④,③>①
    那么最大值肯定在②,③中间
    不妨设②>③,(那意味着这时候j放在上面)
    则Wi−Sj>Wj−Si => Wi+Si>Wj+Sj
    我们便可以得出,以W+S排序,小的放在上面。

    Code

     1 #include<set>
     2 #include<map>
     3 #include<queue>
     4 #include<stack>
     5 #include<cmath>
     6 #include<cstdio>
     7 #include<cstring>
     8 #include<iostream>
     9 #include<algorithm>
    10 #define RG register int
    11 #define rep(i,a,b)    for(RG i=a;i<=b;++i)
    12 #define per(i,a,b)    for(RG i=a;i>=b;--i)
    13 #define ll long long
    14 #define inf (1<<29)
    15 #define maxn 50005
    16 using namespace std;
    17 int n,ans=-inf;
    18 int sum[maxn];
    19 struct D{
    20     int w,s;
    21     inline int operator < (const D &a)const{
    22         return w+s<a.w+a.s;
    23     }
    24 }num[maxn];
    25 inline int read()
    26 {
    27     int x=0,f=1;char c=getchar();
    28     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    29     while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    30     return x*f;
    31 }
    32 
    33 int main()
    34 {
    35     n=read();
    36     rep(i,1,n)    num[i].w=read(),num[i].s=read();
    37     sort(num+1,num+1+n);
    38     rep(i,2,n)    sum[i]=sum[i-1]+num[i-1].w;
    39     rep(i,1,n)    ans=max(ans,sum[i]-num[i].s);
    40     cout<<ans;
    41     return 0;
    42 }
    View Code
  • 相关阅读:
    收缩sql server数据库日志
    maven设置jdk版本
    maven设置镜像地址
    mysql查询最大值,最小值,平均值,总和
    ajax相同url和参数,将不会重复发起请求
    jsp遍历集合
    jsp分割字符串并遍历
    jsp格式化日期
    java判断文件或文件夹是否在
    sqoop1.4.6 用法总结一
  • 原文地址:https://www.cnblogs.com/ibilllee/p/9264265.html
Copyright © 2011-2022 走看看