POJ 3045(递推找规律)

原创 2016年10月25日 08:28:17

Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %lld & %llu

 Status

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.
主要考察思维

题意:N头牛叠罗汉,每头牛有个体重Wi,力气Si.一头牛要承担的风险为所有在它上面的牛的体重之和-它的力气.

求一个方案使得风险最大的牛的风险值最小.


分析:对于相邻的两头牛,它们交换位置不影响其他的任何牛,只改变这两头牛的风险值.


记sum为这两头牛上面的牛的体重总和.i在j上面

Riski=sum-si

Riskj=sum+wi-sj

交换位置

Riski'=sum+wj-si

Riskj'=sum-sj

方案1优于方案2,则max{Riski,Riskj}<max{Riski',Riskj'}

而Riskj>Riskj'

所以Riski'>max{Riski,Riskj},且Riski'>Riskj'.

解之得

wj-si>sj

wj-si>wi-sj

wj-si>si

我们只需要中间的一条.记ti=si+wi

则方案1优于方案2等价于ti<tj,即ti小的在上会更优.

算法就简单了,排序,统计一遍就好了.


#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 50010;
typedef long long LL;
struct node
{
    LL w, s, sum;
}p[N];
int cmp(node a,node b)
{
    return a.sum<b.sum;
}


int main()
{
    int n;
    while(scanf("%d", &n)!=EOF)
    {
        for(int i=0;i<n;i++)
        {
            scanf("%I64d %I64d", &p[i].w, &p[i].s);
            p[i].sum=p[i].w+p[i].s;
        }
        sort(p,p+n,cmp);
        LL ans=-p[0].s, cnt=0;
        for(int i=0;i<n;i++)
        {
            ans=max(ans,cnt-p[i].s);
            cnt+=p[i].w;
        }
        printf("%lld\n",ans);
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

poj3045 贪心,并不是二分

题意: 一群牛在叠罗汉; 每头牛都有一个重量W和力量值X; 在叠的时候每头牛都有一个风险值R; 要你求总的风险值中最大的那个风险值R’;理解: 其实一直都没能理解到意思; 然后手贱看了大神...
  • a1083595345
  • a1083595345
  • 2015年11月28日 16:23
  • 504

Cow Acrobats POJ - 3045 假二分【手动摊手】

题意:有n头牛,然后他们叠罗汉,然后每头牛都有一个w和s,然后每头牛的承受量等于,他们上面的牛的重量-s。求最优解中的最大承受量。 额…因为是在二分专题里,然后想用二分来做,二分最大承受量,然后判断...
  • bllsll
  • bllsll
  • 2017年04月21日 15:31
  • 176

poj 2663 递推问题

题目链接:http://bailian.openjudge.cn/practice/2663/ 描述 一张普通的国际象棋棋盘,它被分成 8 乘 8 (8 行 8 列) 的 64 个...
  • njukingway
  • njukingway
  • 2014年03月04日 11:40
  • 1410

POJ 3517 找规律、递推

#include"iostream" #include"stdio.h" #include"vector" #include"functional" #include"string" #include...
  • qq_32454729
  • qq_32454729
  • 2016年08月27日 05:09
  • 206

【POJ】【今日刷的POJ水题合集】【#1】

传送门:http://poj.org/problem?id=1543 今天在wikioi上好不容易把天梯的题都刷光了,以为能"国家队员"结果TM还是“集训队员”,怒了,在洛谷OJ上交了30+...
  • u012732945
  • u012732945
  • 2014年04月28日 07:11
  • 767

poj 2081 简单递推

#include #include #define N 510000 int dp[N]; int f[10000000]; int main() { int k,n,m,i,j; ...
  • u011483306
  • u011483306
  • 2015年02月06日 19:59
  • 422

POJ ZOJ题目分类

POJ,ZOJ题目分类(多篇整合版,分类很细致,全面) 标签: 题目分类POJ整理 2015-04-18 14:44 1672人阅读 评论(0) 收藏 举报 ...
  • qq_33929112
  • qq_33929112
  • 2016年08月18日 00:40
  • 790

POJ 1093 Formatting Text(DP)

题意:给出一段文章,要求将里面的单词按照n个字符一行来分,不够一行的可以在单词间插入空格来得到,一行有一个basness值,为一个每个gap之间的空格数-1的平方,求badness总和最少的分隔方式....
  • zxjcarrot
  • zxjcarrot
  • 2014年04月05日 18:35
  • 592

hdu3045(斜率dp)

链接:点击打开链接 题意:给出n个数,要将n个数分组,每组最少m个,并将每组中的数变成本组已经存在的一个数,每次变换的代价为两数绝对值的差,求代价和最小 代码:#include #include...
  • stay_accept
  • stay_accept
  • 2016年11月28日 11:08
  • 357

找规律 递推

00011:火车站 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 1024kB 描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,...
  • nucshiyilang
  • nucshiyilang
  • 2016年07月20日 23:19
  • 219
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 3045(递推找规律)
举报原因:
原因补充:

(最多只允许输入30个字)