diff --git a/Competitive Coding/Dynamic Programming/Maximum Circular Subarray Sum b/Competitive Coding/Dynamic Programming/Maximum Circular Subarray Sum
new file mode 100644
index 000000000..6bb046f22
--- /dev/null
+++ b/Competitive Coding/Dynamic Programming/Maximum Circular Subarray Sum	
@@ -0,0 +1,65 @@
+// Program to calculate Maximum Circular Subarray Sum
+
+#include<bits/stdc++.h>
+using namespace std;
+
+// Kadane Algorithm to find the Maximum Sum of continuous elements in an array 
+int kadaneMax(int arr[], int n) {
+  int ans = arr[0], prevBest = arr[0];
+  for(int i=1; i<n; i++) {
+    prevBest = max(prevBest + arr[i], arr[i]);
+    ans = max(ans, prevBest);
+  }
+  return ans;
+}
+
+
+// Kadane Algorithm to find the Minimum Sum of continuous elements in an array 
+int kadaneMin(int arr[], int n) {
+  int ans = arr[0], prevBest = arr[0];
+  for(int i=1; i<n; i++) {
+    prevBest = min(prevBest + arr[i], arr[i]);
+    ans = min(ans, prevBest);
+  }
+  return ans;
+}
+
+// Function to calculate Maximum sum
+int MaxCircularSubarraySum(int arr[], int n) {
+
+  // Count the number of negative elements in array
+  int count = 0;
+  
+  // Store the total sum of all the elements of array
+  int TotalSum = 0;
+  
+  for(int i=0; i<n; i++) {
+    if(arr[i] < 0) {
+      count++;
+    }
+    TotalSum = TotalSum + arr[i];
+  }
+  
+  // Here we are using inverted sum trick 
+  // Maximum sum of circular array can be Max of
+  // case 1: maximum sum of acyclic array
+  // case 2: total - minimum sum of acyclic array
+  
+  if(count == n) {    // Edge case if all elements are negative
+    return kadaneMax(arr, n);
+  }
+  else {
+    return max(kadaneMax(arr, n), TotalSum - kadaneMin(arr, n));
+  }
+}
+
+int main() {
+  int n;  // size of array
+  cin >> n;
+  int arr[n];
+  for(int i=0; i<n; i++) {
+    cin >> arr[i];
+  }
+  cout << MaxCircularSubarraySum(arr, n); // print maxSum
+  return 0;
+}