Find the Sum of Contiguous Subarray of an Array which has the Largest Sum

Given an array of numbers which has both positive and negative numbers, have to find the maximum sum of any of the sub-arrays of that array.

For example:
If the given input is :
5

1 2 3 -3 5
we have to see which is the sub-array that gives the maximum sum.
The possible sub-arrays and their sums are:

{1} sum=1
{1,2} sum=3 
{1,2,3} sum=6
{2,3} sum=5
{1,3} sum=4
{2} sum= 2
{3} sum=3
{1,2,3,-3} sum=3
{2,3,-3} sum=2
{3,-3} sum= 0
{1,2,3,-3,5} sum=8
{2,3,-3,5} sum= 7
{3,-3,5} sum=5
{-3,5} sum=2
{5} sum=5
{-3} sum= -3

As, '8' is the largest sum, print it.

Implementation:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
 int *a,n,i,max=0,curmax=0;
 
 /* Get the number of elements of the array */
 scanf("%d",&n);
 
 /* Dynamically allocate memory block of n integers and store the starting address
 of the block in pointer 'a' */
 a=(int*)malloc(sizeof(int)*n);
 
 /* Get the elements of the array */
 for(i=0;i<n;i++)
  scanf("%d",(a+i));
  
 /* Add the element one by one to curmax*/
 for(i=0;i<n;i++)
 {
  curmax += *(a+i);
  
  /* If curmax value is less than zero, set curmax to zero */
  if(curmax < 0)
  {
   curmax=0;
  }
  
  /* Else get the largest among curmax and max, store the result in max */
  else
  {
   max=curmax>max?curmax:max;
  }
 }
 
 /* Print the maximum sum , which will be in variable 'max' */
 printf("maximum sum is %d",max);
 return 0;
}