Пример #1
0
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;
}
Пример #2
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;
}
Пример #3
0
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;
}
Пример #4
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;
}
Пример #5
0
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;
}