2017-3-17 vijos1844一道坑爹的贪心

本文通过一道关于积木搭建的编程题目,介绍了如何使用贪心算法解决实际问题的方法。作者对比了两种不同的实现思路,并分享了自己对于快速反应和解决问题技巧的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚读完题的时候我完全是蒙了的状态,在观摩了刘。。的代码之后,我依旧觉得不太对,但是我有了一点思路。随后,我写出来了一个思路完全不一样的代码

#include<bits/stdc++.h>
#define ll long long
#define st string
using namespace std;
int a[100005];
int main()
{
	memset(a,0,sizeof(a));
	int n;
	cin>>n;
	cin>>a[1];
	int ans=0;
	for(int i=2;i<=n;i++) {
		cin>>a[i];
		if(a[i]>a[i-1]) ans+=a[i]-a[i-1];
	}
	cout<<ans+a[1]<<endl;
	return 0;
}

思路:

我们从第2块积木开始,只有当前面的积木已经搭好了才去管后面的积木。如果a[i]<=a[i-1]那么搭第i-1块积木的时候一定已经搭好第i块积木,否则就需要把它们两个的差补齐。


liujinyu的的代码可能更不好理解一点,就是跟我的思路是反过来的。但是基本是一样的。


像这种巧妙的贪心题我可能还不是很擅长,可能以后有时间才会去处理。但是这道题给我敲了一个警钟:有的时候是需要迅速的反应出来这道题应该用什么东西去做,现在我的反应速度基本上可能还是想不到或者是需要很长时间去想的。所以说还是要多刷题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值