Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <string>
- #include <stack>
- #include <vector>
- #include <algorithm>
- #include <map>
- #include <set>
- using namespace std;
- long long dp1[1000000] , dp2[1000000] , a[1000000] , n;
- inline long long sqr(long long a) { return a * a ; };
- inline long long absf(long long a) { return (a < 0) ? -a : a ; };
- int main()
- {
- //freopen("input.txt", "r", stdin);
- //freopen("output.txt", "w", stdout);
- scanf("%I64d",&n);
- for (int i = 1 ; i <= n ; i ++ )
- scanf("%I64d",&a[i]);
- dp1[2] = absf(a[1] - a[2]);
- dp1[3] = min(dp1[2] + absf(a[2] - a[3]) , 3 * absf(a[1] - a[3]) );
- dp2[2] = sqr(a[1] - a[2]);
- dp2[3] = min(dp2[2] + sqr(a[2] - a[3]) , 3 * sqr(a[1] - a[3]) );
- for (int i = 4 ; i <= n ; i ++ )
- {
- dp1[i] = min(dp1[i - 1] + absf(a[i - 1] - a[i]) , dp1[i - 2] + 3 * absf(a[i - 2] - a[i]) );
- dp2[i] = min(dp2[i - 1] + sqr(a[i - 1] - a[i]) , min (
- dp2[i - 2] + 3 * sqr(a[i - 2] - a[i]) ,
- dp2[i - 3] + 3 * sqr(a[i - 1] - a[i - 3]) +
- sqr(a[i - 1] - a[i - 2]) + 3 * sqr(a[i] - a[i - 2])
- ) ) ;
- }
- cout << dp1[n] << " " << dp2[n] << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement