2018暑期牛客网多校第二场签到题---贪心

这道题。一开始以为,是到动态规划,结果瞎规划了半天。然后我们队的暴力之神说,这不就是个贪心问题么。结果瞎搞搞就搞对了。我还在苦苦的帮他们证明的时候,就AC了,嗯,不说了。给大家看看题意吧。

题意:一开始一个人有无限多的钱。然后有n个商店,然后你将会顺序的访问这n个商店。到每个商店,你可以执行如下两种操作。买物品,卖物品,或直接不操作走。买物品有前提,就是你手里没有物品时,你才能买,并且只能买一个。所有的商店均只有一个物品,但是买和卖的价格不同。给你每个商店的买卖的价格。问走到最后能最大获利是多少,并且操作数目最小。

题解:嗯,我们其实很容易发现,价格会成为一个线段,有高有低的,我们需要在极小值点买入,极大值点卖就可以了。证明过程我用一个显然来代替。因为这是直观能看出来的。

没有坑点的题。

代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a[100010],n;
int main(){
	ll t;
	scanf("%lld",&t);
	while(t--){
		scanf("%lld",&n);
		for(ll i = 1 ; i <= n ;i ++)
			scanf("%lld",&a[i]);
		ll ok = 0,now,ans = 0,cnt = 0;
		for(ll i = 2 ; i <= n ; i ++){
			if((a[i-1] < a[i]) && ok == 0){
				ok = 1;
				now = a[i-1];
			}
			else if((a[i-1] > a[i]) && ok){
				ans += a[i-1] - now;
				ok = 0;
				cnt += 2;
			}
		}
		if(ok){
			ans += a[n] - now;
			cnt += 2;
		}
		printf("%lld %lld\n",ans,cnt);
	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值