From ea7faed9adc7081860717a67c1d91e9b566f3e7e Mon Sep 17 00:00:00 2001 From: sauravpurva Date: Sat, 6 Oct 2018 23:46:41 +0530 Subject: [PATCH 1/2] msis implemented --- dynamic_programming/a.out | Bin 0 -> 8620 bytes dynamic_programming/msis.cpp | 39 +++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100755 dynamic_programming/a.out create mode 100644 dynamic_programming/msis.cpp diff --git a/dynamic_programming/a.out b/dynamic_programming/a.out new file mode 100755 index 0000000000000000000000000000000000000000..5ff9d375d4fd58b0e049ff0b98bf360573c36c67 GIT binary patch literal 8620 zcmeHNUuYaf7@x}@O||jTl7|Fa+y*1oO43LQDKYg@x;W8R(yykq{E(2Z9?RebNRhMKVJDDCWGcdnhb>O23eKA z4Q$bC3X#hfV!2(HAFm@U@c`q9Yr7qq6y9EbgeRtxso7)}L4LfG3h#LZK(S$JhHw0-S@&x zfA2j#KlIj{`ne(Z9n*Zg!6y0AA(Jt}QB}v^f!F^e)ilP4nb=kCJ!^ro=BFHe$+gJ`!CV%pUx^0r2#rJYrZ#6C94Li| zsok+Le*DCVuAVL=VZ@xg`aJOsuT(J2+W3+ATt1oZI;*-Mnz0w4l;2HF@_k&{#AhG@ z0|5g80|5g80|5j7je#+4{=}EJBiw2{guMs17&rAt++5f(3)^dYnNY35wzt4 zV#5k;dHJoKYPCu`5q=Ee5BTvlZvL^R+tdMp8)YWXZ7{f{@9_8q+iJbWOWGYiy&x;lpr|HcOs#%(1c$=N51*y^KsYxw+1*=IfX|w+;Z|5kLK{sjr7u znjGMDZf=j?u|I(kelEgxpI32V1J7*S>E=AMHGLg10BO8Qg{f2f4O!hp^$S@oTg{)N zW?rz@^n3LDtinC}w?C^@UL3Hf;paGHig=rKd%5E*UT6lei_15@7G;KAeHzG-POG z*f3b1JS!=;4Z99kH6F>gOWZ!nF*xLJ DnBnN{ literal 0 HcmV?d00001 diff --git a/dynamic_programming/msis.cpp b/dynamic_programming/msis.cpp new file mode 100644 index 0000000..a8c4a39 --- /dev/null +++ b/dynamic_programming/msis.cpp @@ -0,0 +1,39 @@ + /*Maximum Sum Increasing Subsequence +(MSIS) problem */ +#include + +int maxSumIS(int arr[], int n) +{ + int i, j, max = 0; + int msis[n]; + + for ( i = 0; i < n; i++ ) + msis[i] = arr[i]; + + /* Compute maximum sum values + in bottom up manner */ + for ( i = 1; i < n; i++ ) + for ( j = 0; j < i; j++ ) + if (arr[i] > arr[j] && + msis[i] < msis[j] + arr[i]) + msis[i] = msis[j] + arr[i]; + + /* Pick maximum of + all msis values */ + for ( i = 0; i < n; i++ ) + if ( max < msis[i] ) + max = msis[i]; + + return max; +} + +// Driver Code +int main() +{ + int arr[] = {1, 100, 2, 3, 105, 4, 5}; + int n = sizeof(arr)/sizeof(arr[0]); + printf("Sum of maximum sum increasing " + "subsequence is %d\n", + maxSumIS( arr, n ) ); + return 0; +} \ No newline at end of file From 992f773c46743f1e511edd23f6e0414c1a17c967 Mon Sep 17 00:00:00 2001 From: sauravpurva Date: Sun, 7 Oct 2018 00:08:08 +0530 Subject: [PATCH 2/2] mss added --- divide_and_conquer/a.out | Bin 0 -> 8844 bytes divide_and_conquer/mss.cpp | 56 +++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100755 divide_and_conquer/a.out create mode 100644 divide_and_conquer/mss.cpp diff --git a/divide_and_conquer/a.out b/divide_and_conquer/a.out new file mode 100755 index 0000000000000000000000000000000000000000..5e907abbf2fc6ffabba1b89863d7e1e6c5cebd5b GIT binary patch literal 8844 zcmeHNUuauZ7(Zz`&E{shxrc798i&=*VgKlub9LB`9d^eWovr~H8;3Ma+sl%)B)Pag zL;`WJ%h_g?iHHb$@nNDcamZej>4b`i7TH6PJmewj4MgZe)hK20_uW73O}dJ&!u{af z?|gsGcfRvGCvfil^26W1-MN=BpP#XO8)K{kEx(Sjb1Z}&W82UaG$D=;9pNYW%P*3) znS9OST_uXM3lj)2!e1F_b}`4(#BQ=>Fo8O4Vz^u|@KqR+Y zUF+G-@@`RxOjaAsEUQ}M9SBEsv`BW3r+Dst5h4-&w|Jd) zyiQ66M6x>`{Vtp{NA{K9>G07Pj`71sM@S0_wcrMs=z_fo6vxEX)H1dcKmR`JhZrMl z0^p{MKGFUV8u&E$d2k9tIR+kK>^|@k_%(3qA4hW&&Sn@~r4$7T{^kcl2dqddB1_x45u2fE(7eB`abN57wX6uJ&HwrPXeo^WK+fp%fN zH0}yb;3Arb)=f4Os`axzLTY(#%pcpcr>DOMNvNY{Ui)4C?N3#(-Oc_dW-{4$vgeRJ z1m282hDQ0-Ll)m{%Y> s(W$9s(W$9s(W${|$kNqW`StmUOKywWR^A9=t?15y_Wy zzF4Kphvap1C0{&!EBNprBY&k(>#)Y?kwuwXl3Lxk-e@$Wwy4h;AEKuezV2}O>$$oP zTVz2G*XFoEna%MEo_QIDt}J@(*x6dA57u}In9{-(|i$&CSC30|_2F?3$3 zQUHu8+-&H)T>SzQE=MhyQTamQrcdWZ$%_NL7JQ>QaM2aG+e(a+=8yv^oSuNwSkBcJof;sisTDQEL@XY&+Cz;>Nr$4=r$z7HGdeXm-TPn zmErQAe_<7h%q>W*h6(hqj1LGjQiLmoFMTp%=-=zSWL$F8@QYL=g(wpmlfbkP0O>Kby>C+O+n zg*jfN3#SYh3ss-~t+9b}xOng#vhv$fyM2ur&zZu!L2qS>Jou~0o*%|p8Gd$7=idd- z(OtOzCUP1)eak=!Y_`!|1Z#BvWIidA;fr0LgAJW%bbky!JBbIY{(|`?=^9xrQSWi; z{fHhJtvkK*eoJ?8nkO7Rt0uK%2ycE_bwZocGNBAaH52L{!z~uKO2&4e5xF_-488B} z1*b;uszlVMcZZD_*8AqiO=CbO`#1cs4c}CC~IOh|{PyXUDB^%qLL)YZGj9GODIn!N=N?lOldL z9@DaMl+B|w!|s#pNwetI_H+{8LR5C3pB?eD`E5Rx9rCmMcGTqd!6IVmsZ0jNY=Q41 z$5jxUd4}{El;ET3bacisu-E+T+ID;e$?w49N*7}F_09XP(5DoWXu2SzzD?GLkuF +#include + +int max(int a, int b) { return (a > b)? a : b; } + +int max(int a, int b, int c) { return max(max(a, b), c); } + +// Find the maximum possible sum in arr[] auch that arr[m] is part of it +int max_crossing_sum(int arr[], int l, int m, int h) +{ + + int sum = 0; + int left_sum = INT_MIN; + for (int i = m; i >= l; i--) + { + sum = sum + arr[i]; + if (sum > left_sum) + left_sum = sum; + } + + sum = 0; + int right_sum = INT_MIN; + for (int i = m+1; i <= h; i++) + { + sum = sum + arr[i]; + if (sum > right_sum) + right_sum = sum; + } + + return left_sum + right_sum; +} + +int max_sub_array_sum(int arr[], int l, int h) +{ + // Base Case: Only one element + if (l == h) + return arr[l]; + + // Find middle point + int m = (l + h)/2; + + return max(max_sub_array_sum(arr, l, m), + max_sub_array_sum(arr, m+1, h), + max_crossing_sum(arr, l, m, h)); +} + +int main() +{ + int arr[] = {3,5,6,7,8}; + int n = sizeof(arr)/sizeof(arr[0]); + int max_sum = max_sub_array_sum(arr, 0, n-1); + printf("Maximum contiguous sum is %d\n", max_sum); + getchar(); + return 0; +} \ No newline at end of file