int main( int argc, char **argv ) { /* perform a simple parameter check */ if( argc != 3 ) exit( EXIT_FAILURE ); /* initialation */ int p[] = { 0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30 }; int rod_length = atoi( argv[2] ); /* Use proceed to store the solution value, s to store the solution */ int proceed = 0; int *s = (int *)malloc( sizeof(int) * ( rod_length +1 ) ); /* calculate the solution */ switch( argv[1][1] ){ case 'r': proceed = cut_rod( p, rod_length, s ); break; case 'm': proceed = memoized_cut_rod( p, rod_length, s ); break; case 'b': proceed = bottom_up_cut_rod( p, rod_length, s ); break; default: exit( EXIT_FAILURE ); } /* print the solution */ print_cut_rod_solution( rod_length, proceed, s ); return 0; }
int cut_rod(int p[], int j, int memo[]){ int q; if(memo[j]>=0) return memo[j]; if(j==0) q = 0; else{ q = MIN; for(int i=1;i<=j;i++){ if(q<p[i]+cut_rod(p,j-i,memo)){ q = (p[i]+cut_rod(p,j-i,memo)); path[j] = i; } } } memo[j] = q; return q; }
int main() { int price[]={1 ,5, 8,9,10,17,20}; int n=8; printf("Optimal Max solution is :%d\n",cut_rod(price,n)); return 0; }
/* Normal recurrsive method */ int cut_rod( int *p, int n, int *s ) { int q = INT_MIN; if( n == 0 ) return 0; /* * i counts from 1 but not 0, * because a function can't call itself with the same parameters. */ for( int i = 1; i <= n; i++ ){ int current_proceed = p[i] + cut_rod( p, n-i, s ); if( q < current_proceed ){ q = current_proceed; s[n] = i; } } return q; }
int memo_init(int p[], int j){ for(int i=0;i<=j;i++){ memo[i] = MIN; } return cut_rod(p,j,memo); }
int main(){ int arr[] = { 10, 22, 9, 33, 21, 50, 41, 60 }; int n = sizeof(arr)/sizeof(arr[0]); printf("Length of LIS is %d\n", longest_increasing_subsequence( arr, n ) ); { char X[] = "AGGTAB"; char Y[] = "GXTXAYB"; int m = strlen(X); int n = strlen(Y); printf("Length of LCS is %d\n", longest_common_subs( X,m, Y, n) ); } { int cost[5][5] = { {1, 2, 3}, {4, 8, 2}, {1, 5, 3} }; printf("\n%d ", min_cost(cost, 2, 2)); } { int arr[] = {1, 2, 5}; int m = sizeof(arr)/sizeof(arr[0]); int n = 11; printf("\ncoin change : %d ", coin_change(arr, m, n)); } { int val[] = {60, 100, 120}; int wt[] = {10, 20, 30}; int W = 50; int n = sizeof(val)/sizeof(val[0]); printf("\n%d", knapsack(wt, W, val, n)); } { char seq[] = "GEEKS FOR GEEKS"; printf ("\nThe lnegth of the LPS is %d", longest_palindromic_subs(seq)); } { int arr[] = {1, 5, 8, 9, 10, 17, 17, 20}; int size = sizeof(arr)/sizeof(arr[0]); printf("\nMaximum Obtainable Value is %d\n", cut_rod(arr, size)); } { int arr[] = {1, 101, 2, 3, 100, 4, 5}; int n = sizeof(arr)/sizeof(arr[0]); printf("\nSum of maximum sum increasing subsequence is %d\n", max_increasing_subs( arr, n ) ); } { int arr[] = {0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15}; int n = sizeof(arr)/sizeof(arr[0]); printf("\nLength of LBS is %d\n", bitonic_subs( arr, n ) ); } { char str[] = "ababbbabbababa"; printf("Min cuts needed for Palindrome Partitioning is %d", min_pal_partition(str)); } { int arr[] = {1, 3, 6, 1, 0, 9}; int size = sizeof(arr)/sizeof(int); printf("\nMinimum number of jumps to reach end is %d ", min_jumps(arr,size)); } { int n = 150; printf("\n%d ugly number is : %d",n,find_nth_ugly(n)); } { int M[6][5] = {{0, 1, 1, 0, 1}, {1, 1, 0, 1, 0}, {0, 1, 1, 1, 0}, {1, 1, 1, 1, 0}, {1, 1, 1, 1, 1}, {0, 0, 0, 0, 0}}; print_max_square(M,6,5); } { char str[] = "forgeeksskeegfor"; printf("\nLength is: %d\n", print_longest_pal( str ) ); } return 0; }