diff --git a/contests/Cadernaveis/URI1932_ite.cpp b/contests/Cadernaveis/URI1932_ite.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a5204f43a05d10bb9e2f96376f9332fa3426301e --- /dev/null +++ b/contests/Cadernaveis/URI1932_ite.cpp @@ -0,0 +1,43 @@ +#include <bits/stdc++.h> + +#define MAX 201010 +#define EPS 1e-6 +#define MOD 1000000007 +#define inf 0x3f3f3f3f +#define llinf 0x3f3f3f3f3f3f3f3f + +#define fi first +#define se second +#define sz size() +#define pb push_back +#define ende '\n' + +#define all(x) (x).begin(), (x).end() +#define rall(x) (x).rbegin(), (x).rend() +#define mset(x, y) memset(&x, (y), sizeof(x)) + +using namespace std; + +typedef long long ll; +typedef pair<int,int> ii; + +int n, c; +int v[MAX]; +int dp[MAX][2]; + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + cin >> n >> c; + for (int i = 0; i < n; ++i) + cin >> v[i]; + + for (int i = n-1; i >= 0; --i) { + dp[i][0] = max(dp[i+1][1] - c - v[i], dp[i+1][0]); + dp[i][1] = max(dp[i+1][0] + v[i], dp[i+1][1]); + } + + cout << dp[0][0] << ende; + return 0; +} diff --git a/contests/Cadernaveis/URI1932_rec.cpp b/contests/Cadernaveis/URI1932_rec.cpp new file mode 100644 index 0000000000000000000000000000000000000000..09953e6e5201aff7f19a5dfec372bed4f9a2532f --- /dev/null +++ b/contests/Cadernaveis/URI1932_rec.cpp @@ -0,0 +1,56 @@ +#include <bits/stdc++.h> + +#define MAX 201010 +#define EPS 1e-6 +#define MOD 1000000007 +#define inf 0x3f3f3f3f +#define llinf 0x3f3f3f3f3f3f3f3f + +#define fi first +#define se second +#define sz size() +#define pb push_back +#define ende '\n' + +#define all(x) (x).begin(), (x).end() +#define rall(x) (x).rbegin(), (x).rend() +#define mset(x, y) memset(&x, (y), sizeof(x)) + +using namespace std; + +typedef long long ll; +typedef pair<int,int> ii; + +int n, c; +int v[MAX]; +int dp[MAX][2]; + +int solve(int i, bool hold) { + if (i == n) + return 0; + + if (dp[i][hold] != inf) + return dp[i][hold]; + + if (!hold) + return dp[i][hold] = max(solve(i + 1, true) - c - v[i], + solve(i + 1, false)); + else + return dp[i][hold] = max(solve(i + 1, false) + v[i], + solve(i + 1, true)); +} + + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + mset(dp, 0x3f); + + cin >> n >> c; + for (int i = 0; i < n; ++i) + cin >> v[i]; + + cout << solve(0, false) << ende; + return 0; +}