Posts

Showing posts from October, 2021

0-1 knapsack(Dynamic Programming).

  #include <bits/stdc++.h> using namespace std ; #define shailesh ios :: sync_with_stdio ( false ); cin. tie ( 0 ); cout. tie ( 0 ); #define ll long long int #define vi vector < int > #define pii pair < int , int > #define vii vector < pii > #define rep ( i , a , b ) for ( int i = a; i < b; i ++ ) #define ff first #define ss second const int N = 1 e 3 + 2 , MOD = 1 e 9 + 7 ; int val[N], wt[N]; int dp[N][N]; int Knapsack ( int n , int w ){     if ( w <= 0 )     return 0 ;     if ( n <= 0 )     return 0 ;     if (dp[ n ][ w ] !=- 1 )     return dp[ n ][ w ];     if ( w < wt[ n - 1 ])        dp[ n ][ w ] = Knapsack ( n - 1 , w );     else          dp[ n ][ w ] = max ( Knapsack ( n - 1 , w ), Knapsack ( n - 1 , w - wt[ n - 1 ]) + val[ n - 1 ]);         return dp[ n ][ w ]; } int main (){         shailesh     rep (i, 0 , N){         rep (j, 0 , N)            dp[i][j] =- 1 ;            }     int n;    cin >> n;     re

Greedy algorithm Fractional Knapsack

  #include <bits/stdc++.h> using namespace std ; #define shailesh ios :: sync_with_stdio ( false ); cin. tie ( 0 ); cout. tie ( 0 ); #define ll long long int #define vi vector < int > #define pii pair < int , int > #define vii vector < pii > #define rep ( i , a , b ) for ( int i = a; i < b; i ++ ) #define ff first #define ss second bool compare ( pii p1 , pii p2 ){     double v1 = ( double ) p1 . ff / p1 . ss ;     double v2 = ( double ) p2 . ff / p2 . ss ;     return v1 > v2; } int main (){     shailesh         int n;    cin >> n;     vii a(n);     rep (i, 0 , n)    {        cin >> a [ i ] . ff >> a [ i ] . ss ;    }     int w;    cin >> w;     sort (a. begin (), a. end (), compare );     int ans = 0 ;     rep (i, 0 , n)    {         if (w >= a [ i ] . ss )        {            ans += a [ i ] . ff ;            w -= a [ i ] . ss ;             continue ;        }         double vw = ( double ) a [ i

Greedy_algorithm Indian coin change problem

  #include <bits/stdc++.h> using namespace std ; #define shailesh ios :: sync_with_stdio ( false ); cin. tie ( 0 ); cout. tie ( 0 ); #define ll long long int #define vi vector < int > #define pii pair < int , int > #define vii vector < pii > #define rep ( i , a , b ) for ( int i = a; i < b; i ++ ) #define ff first #define ss second int main (){     shailesh     int n;    cin >> n;     vi a(n);     rep (i, 0 , n){        cin >> a [ i ] ;    }     int x;    cin >> x;     sort (a. begin (), a. end (), greater < int >());     int ans = 0 ;     rep (i, 0 , n)    {        ans += x / a [ i ] ;        x -= x / a [ i ] * a [ i ] ;    }    cout << ans << endl ;     return 0 ; } // input 10 1 2 5 10 20 50 100 200 500 2000 350 // output 3

HeapSort

  #include <bits/stdc++.h> using namespace std ; #define rep ( i , a , b ) for ( int i = a; i < b; i ++ ) void heapify ( vector < int > & a , int n , int i ){     int maxIdx = i ;     int l = 2 * i + 1 ;     int r = 2 * i + 2 ;     if (l < n && a [ l ] > a [ maxIdx ] )     maxIdx = l;     if (r < n && a [ r ] > a [ maxIdx ] )     maxIdx = r;     if (maxIdx != i ){         swap ( a [ i ] , a [ maxIdx ] );         heapify ( a , n , maxIdx);     } } void heapsort ( vector < int > & a ){     int n = a . size ();     for ( int i = n / 2 - 1 ; i >= 0 ; i -- ){         heapify ( a , n, i);     }     for ( int i = n - 1 ; i > 0 ; i -- ){         swap ( a [ 0 ] , a [ i ] );         heapify ( a , i, 0 );     } } signed main (){     int n;     cin >> n;     vector < int > a(n);     rep (i, 0 , n)     cin >> a [ i ] ;     heapsort (a);         rep (i, 0 , n){        cout << a [ i ] << &

queue using stack

  #include <bits/stdc++.h> using namespace std ; class que {     stack < int > s1;     stack < int > s2;     public:     void push ( int x ){         s1. push ( x );     }     int pop (){         if (s1. empty () and s2. empty ()){             cout << "Queue is empty " << endl ;             return - 1 ;         }         if (s2. empty ()){             while ( ! s1. empty ()){                 s2. push (s1. top ());                 s1. pop ();             }         }         int topval = s2. top ();         s2. pop ();         return topval;     }     bool empty (){         if (s1. empty () and s2. empty ())         return true ;         return false ;     } }; int main (){     que q;     q. push ( 1 );     q. push ( 2 );     q. push ( 3 );     q. push ( 4 );     cout << q. pop () << " \n " ;     q. push ( 5 );     cout << q. pop () << " \n " ;     cout << q. pop () << "

Queue data structure in c++

  #include <iostream> using namespace std ; #define n 10 class queue {     int * arr;     int front;     int back;     public:       queue (){          arr = new int [ n ];          front =- 1 ;          back =- 1 ;      }       void push ( int x ){           if (back == n - 1 ){              cout << "queue is not empty " << endl ;               return ;          }          back ++ ;          arr[back] = x ;           if (front ==- 1 ){              front ++ ;          }      }       void pop (){           if (front > back || front ==- 1 ){              cout << "no element is in the queue " << endl ;               return ;          }          front ++ ;      }       int peek (){           if (front > back || front ==- 1 ){              cout << "no element in the queue" << endl ;               return - 1 ;          }           return arr[front];      }       bool empty (){           if (front &

Stack data structure in c++

  #include <iostream> using namespace std ; #define n 100 class stack {     int * arr;     int top;     public:     stack (){         arr = new int [ n ];         top =- 1 ;     }     void push ( int x ){         if (top == n - 1 ){             cout << "stack overflow " << endl ;             return ;         }         top ++ ;         arr[top] = x ;     }     void pop (){         if (top ==- 1 ){             cout << "no element to pop" << endl ;             return ;         }         top -- ;     }     int Top (){         if (top ==- 1 ){             cout << "no element in stack " << endl ;             return - 1 ;         }         return arr[top];     }     bool empty (){         return top ==- 1 ;     } }; int main (){     stack st;     st. push ( 1 );     st. push ( 2 );     st. push ( 3 );     cout << st. Top () << endl ;     st. pop ();     st. pop ();     st. pop ();     cout &l

linked_list inc ++

  // linked list implementation in c++ #include <bits/stdc++.h> using   namespace   std ; class   node {       public:       int  data;       node *  next;       node ( int   val ){          data = val ;          next = NULL ;      } }; void   insertAtTail ( node *   & head ,  int   val ){      node *  n = new   node ( val );      if ( head == NULL ){          head = n;          return ;     }      node *  temp = head ;      while (temp->next != NULL ){       temp = temp->next;     }     temp->next = n; } void   display ( node *   head ){      node *  temp = head ;      while (temp != NULL ){         cout << temp->data << "->" ;         temp = temp->next;     }     cout << "NULL" << endl ; } void   insertAthead ( node *   & head ,  int   val ){      node *  n = new   node ( val );     n->next = head ;      head = n; } int   main (){      node *  head = NULL ;      insertAtTail (head,  1 );      insertAtTail