#include #include #include #define MAXVAL 99 #define PLUS_INFTY 2147483647 #define MINUS_INFTY -2147483648 void genArrays ( int *A, int *B, int n ) { int i; for (i=0; i= 0) printf("%d", x); else printf("(%d)", x); } /* For positive integers, the left-to-right associative method is also the Minminusian difference. */ void prn1 ( int *A, int n ) { int i; printf(" Left-to-right associative difference:\n "); if (n == 0) { printf("0\n"); return; } prnInt(A[0]); for (i=1; i= max) { max = diff; maxidx = k; } diff = mind[i][k] - maxd[k+1][j]; if (diff <= min) { min = diff; minidx = k; } } maxd[i][j] = max; U[i][j] = maxidx; mind[i][j] = min; V[i][j] = minidx; } } printf(" Dynamic-programming solution (Maxminusia):\n "); prn3(A,U,V,0,n-1); printf(" = %d\n", maxd[0][n-1]); printf(" Dynamic-programming solution (Minminusia):\n "); prn4(A,U,V,0,n-1); printf(" = %d\n", mind[0][n-1]); /* Coutesy: free locally allocated memory */ for (i=0; i= 0) { max += A[i]; min -= A[i]; } else { max -= A[i]; min += A[i]; } } } printf(" Greedy solution (Maxminusia): %d\n", max); printf(" Greedy solution (Minminusia): %d\n", min); } int main ( int argc, char *argv[] ) { int n, *A, *B; srand((unsigned int)time(NULL)); if (argc > 1) n = atoi(argv[1]); else scanf("%d", &n); A = (int *)malloc(n * sizeof(int)); B = (int *)malloc(n * sizeof(int)); genArrays(A,B,n); printf("\n*** Dealing with positive integers only...\n"); prn1(A,n); prn2(A,n); MDP(A,n); prn5(A,n); printf("\n*** Dealing with arbitrary integers...\n"); prn1(B,n); MDP(B,n); prn5(B,n); exit(0); }