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;
    }
  • 相关阅读:
    《杜教筛》
    《洛谷P4213 【模板】杜教筛(Sum)》
    《洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB》
    《纸牌问题》
    《洛谷P2522 [HAOI2011]Problem b》
    使用urlretrieve下载图片
    scrapy初探
    爬豆瓣电影名
    直接插入排序
    Windows python 3 安装OpenCV
  • 原文地址:https://www.cnblogs.com/IKnowYou0/p/6694538.html
Copyright © 2011-2022 走看看