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;
+}