zoukankan      html  css  js  c++  java
  • POJ 3045 Cow Acrobats

    传送门:http://poj.org/problem?id=3045

    题意:
    给你一些牛,每个牛有weight,和strength两个属性,你可以按照一定的顺序将它们排成一列,每一头牛都有一个风险指数=它们前面所有牛的重量-它的strength,求风险指数最大的牛其风险指数的最小值。
    解题思路:
    本题最重要是找到一个最优的排列,

    不妨设牛已经按照最优的方式排成一列:
    设w=w1+w2+....+wi-1  
    第i头牛的风险指数:w-si   ①
    第i+1头牛的风险指数: w+wi-si+1   ②

    现在交换两头牛那么:
    i+1头牛的风险指数(现在的第i头牛):w-si+1   ③
    i头牛的风险指数(现在的第i+1头牛):w+wi+1-si  ④

    很明显: ①<④, ③<②,而我们假设原来是最优的,而交换后肯定不是最优的,那么就有:②<④,即wi+si<wi+1+si+1,
    那么本题的解法就是根据wi+si排序就成了。
    实现代码:
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    
    const int MAXN=50000;
    const int INF=1<<30;
    
    struct Node{
        int w,s;
        bool operator <(const Node &rhs) const{
            return w+s<rhs.w+rhs.s;
        }
    }cow[MAXN];
    
    
    int main(){
        int N;
        cin>>N;
        for(int i=0;i<N;i++){
            scanf("%d%d",&cow[i].w,&cow[i].s);
        }
        sort(cow,cow+N);
        int Max=-INF;
        int sum=0;
        for(int i=0;i<N;i++){
            Max=max(Max,sum-cow[i].s);
            sum+=cow[i].w;
        }
        cout<<Max<<endl;
        return 0;
    }
  • 相关阅读:
    Linux之文档与目录结构
    Linux介绍
    CentOS7下zip解压和unzip压缩文件
    yum 命令讲解
    Linux安装redis
    pip更新问题
    第一章-KS8初体验 安装部署
    MVC Razor视图引擎
    MVC 组件之间的关系
    Web应用程序和网站的区别
  • 原文地址:https://www.cnblogs.com/IKnowYou0/p/6694538.html
Copyright © 2011-2022 走看看