1. 程式人生 > >NOIP 2013 洛谷 P1969 積木大賽

NOIP 2013 洛谷 P1969 積木大賽

題目:積木大賽

思路: 令f[i]表示建到第i列的最少次數。 轉移: f[i]=f[i1]+a[i]a[i1](a[i]>a[i1])f[i]=f[i-1]+a[i]-a[i-1] \ \ \ (a[i]>a[i-1]) f[i]=f[i1](a[i]<a[i1])f[i]=f[i-1] \ \ \ (a[i]<a[i-1])

程式碼:

#include<bits/stdc++.h>
using namespace std; #define maxn 100000 #define read(x) scanf("%d",&x); int n; int a[maxn+5]; int f[maxn+5]; int main() { read(n); for(int i=1;i<=n;i++) { read(a[i]); } for(int i=1;i<=n;i++) { if(a[i]>a[i-1]) f[i]=f[i-1]+a[i]-a[i-1]; else f[i]=f[i-1]; } printf("%d",f[n]); return
0; }