1 条题解

  • 0
    @ 2026-8-13 22:36:31

    (其实是USACO原题)

    它就是一个贪心。

    题目里给的样例是4,3,2,5,3,5;

    可以选择一个区间进行“填坑”操作;

    所以我们的贪心策略是:

    若a[i]>a[i-1],计数器sum+=a[i]-a[i-1];

    那么为什么这样贪心是对的呢?

    贪心证明

    假设现在有一个坑,但旁边又有一个坑。

    你肯定会选择把两个同时减1;

    那么小的坑肯定会被大的坑“带着”填掉。

    大的坑也会减少a[i]-a[i-1]的深度,可以说是“免费的”;

    所以这样贪心是对的;

    代码

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

    记得要加上a[1],或者在前面填一个0; (这是本蒟蒻第一次写题解,支持一下哦。)

    • 1

    A35_1 贪心算法[NOIP 2018 提高组] 铺设道路

    信息

    ID
    805
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    35
    已通过
    24
    上传者