luogu5019 [NOIp2018]铺设道路 (贪心)

和NOIp2013 积木大赛一模一样

我在堆一格的时候,我把它尽量地往右去延伸

于是如果对于一个i,a[i-1]<a[i],那i在之前一定只堆过a[i-1]那么多,所以要再堆a[i]-a[i-1]

如果a[i-1]>=a[i],那i肯定都堆过了

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
typedef pair<int,int> pa;
const int maxn=1e5+; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){
if(c=='-') neg=-;
c=getchar();
}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} int N,a[maxn];
int main(){
// freopen("road.in","r",stdin);
// freopen("road.out","w",stdout);
int i,j,k;
N=rd();
for(i=;i<=N;i++) a[i]=rd();
int ans=;
for(i=;i<=N;i++){
if(a[i]>a[i-]) ans+=a[i]-a[i-];
}
printf("%d\n",ans);
return ;
}
上一篇:NOIP提高组2018试题解析 Day1 T1 铺设道路 P5019


下一篇:ADMM与one-pass multi-view learning