Live2D

洛谷题解 P1842 【奶牛玩杂技】

Oh,可怜的奶牛

开始说正题 :


猜测:(注:这只是一种形象的说法)
与重量和力量都有关,再分析样例,发现是重量+力量。

  1. 若w值较大,则将其放在最下方,不让它压其他牛;
  2. 若s值较大,则将其放在最下方,承受其他牛的压力。

证明:设有a和b两头相邻的牛 (a在下,b在上) 文中W为重量总和
\(Wa+Sa<Wb+Sb\)
\(Wa-Sb<Wb-Sa\)
\(W-Sb<W+Wa-Sb\)
\(W-Sa<W+Wb-Sa\)
发现:\(W+Wa-Sb<W+Wb-Sa\)
显然,在\(Wa+Sa<Wb+Sb\)的情况下,选择b在下,a在上。方案更优。
综上所述,将 W+S 值大的牛放在下方即可。


注意结果有可能是负数(不然60分)(本菜已被坑)


现将本蒟蒻的代码献上

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct node { int w,s,data,k; } a[50005];
bool cmp(node a,node b) { return a.data>b.data; }
int main() {
	int n,Max,zw=0;
	cin>>n;
	for(int i=1;i<=n;i++) {
		cin>>a[i].w>>a[i].s;
		a[i].data=a[i].w+a[i].s;
		zw+=a[i].w;
	}
	sort(a+1,a+n+1,cmp);
	zw-=a[1].w;
	a[1].k=zw-a[1].s;
	Max=a[1].k;
	for(int i=2;i<=n;i++) {
		zw-=a[i].w;
		a[i].k=zw-a[i].s;
		Max=max(Max,a[i].k);
	}
	cout<<Max;
   return 0;
}

看我打的那么认真,就给个赞呗

posted @ 2020-09-01 23:30  Wuzhouming  阅读(146)  评论(0编辑  收藏  举报