0% found this document useful (0 votes)
6 views13 pages

Dynamic Programming (DP)

The document outlines various algorithms related to dynamic programming, including the 0-1 Knapsack problem, Subset Sum Problem, and Longest Common Subsequence. It provides pseudocode for each algorithm and discusses their implementation details. The focus is on solving optimization problems using dynamic programming techniques.

Uploaded by

rahul banerjee
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views13 pages

Dynamic Programming (DP)

The document outlines various algorithms related to dynamic programming, including the 0-1 Knapsack problem, Subset Sum Problem, and Longest Common Subsequence. It provides pseudocode for each algorithm and discusses their implementation details. The focus is on solving optimization problems using dynamic programming techniques.

Uploaded by

rahul banerjee
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 13

Problem :

0-1 Knapsack
int knap (int C ,
intvalt] ,
intWtIS ,
intn) &
if (n = = 0 11 ( = = 0)
dp[c 1] [n 1]
+ +
;

return O ; int knap (int C ,


intvalt] ,
intWtIS ,
intn) &
if (w + [n -

1] < C) =
i ) (
(inti i +
for = 0
;
< = c ; +

return max
(ral [n-1) + knap(c-w In 1) + -

,
val , wt , n -
,
1)

for (inti = 0
; i < = n ; j + +
))
knap (C ,
val ,
wt , n-1)) ;
it (i = = 0 11i = =
0)
else
Return Knap (C ,
val ,
wt , n-1) ; p
↓ [i] [ii] =
Oi
3
3 3

for (inti = 0
;
i < = c ; i + +
) (
for (inti = 0
; i < = n ; j + +
))
if (w+ [j 1]) =
i)
dPliJti-13)
-

dP[i][i] = man
(val[i -1 + dP[-w + [ - 1]][j 1]
-

,
:

else

dp[c 1] [n 1]
+ + = -
1 di[i][i] =
dp[i][i-1]
int knap (int C intvalt] ,
intWtIS ,
intn) & 3
,
3
if (n = = 0 11 ( = =
0) Return dp[c] [n] ;
3
return O ;

if (dp[c][n] ! = -

1)
return dp[c] [n] ;

else ?
if (w + [n -

1] < C) =

return dp[c] [n) = mar


(ral [n-1) + knap(c-w + In 1) -

,
val , wt , n -
,
1)

knap (C ,
val ,
wt , n-1)) ;

else
Return dp[c][n] =
Knap (2 ,
val ,
wt , n-1) ;
3

3
🔗
0-1 knapsack

Subset Sum Problem

dp[c 1] [n 1]
+ +
;

book subsetsum (intarrIs ,


intn , int sum) ?
if (sum ==
0)
return 1 :

else if (n = =
0)
return O ;

if Jarr[n][sum] ! = -

1)
return arr [n][sum] ;

if (arr[n-1] <= sum)


return dp[n][sum] =
subsetsum(arr ,
n-1 ,
sum-ar r In-1)) 11

subsetsum(arr ,
n-1 , sum) ;
else
Return dp[n] [sum] =
subsetsum(arr ,
n-1 , sum) ;

3
🔗

Sum Partition
Equal
dp[c 1] [n 1]
+ +
;

book subsetsum (intarrIs ,


intn ,
int sum) ?
if (sum ==
0)
return 1 :

else if (n = =
0)
return O ;

if Jarr[n][sum] ! = -

1)
2 + 20 + 1 = 23
return [n][sum] ;

3 true/false
arr

arr[] =
75 , 7 ,
2 ,
6 ,
20 ,
5 ,
1 =
if (arr[n-1]
return
<=

dp[n][sum]
sum)
=
subsetsum(arr ,
n-1 ,
sum-arr In-1)) 11

5 +7 + 6 + 5 = 23 subsetsum(arr ,
n-1 , sum) ;

else

dp[n] [sum] subsetsum(arr sum)


5342 13
n-1

45
Return =
, , ;

7 6, ,
20 ,
, ,

3
V Hv

23 23

book equalsumpartition (intarr[] intn) & ,

int Sum = 0 ;

for (int i = 0 ; i < n ; i ++ )


Sumt = arr [i] ;

if (sum % 2 ! =
0)
return false ;

bool check = subsetsum (arr ,


n
, sum(2) ;

return check
3
Subsetsum

Equal Sum to
Target

ars =
(5 ,
7 ,
1 ,
11 ,
9 ,
3, 17 , 7
5 -+ 12

Sum = 12 .. 3
9 - 12

1 11 >
- 12
Ans
,
= 5
1 , 11 - 12

7, 1 ,
3 1
,
-> 12

dp[c 1] [n 1]
+ +
;

int subsetsumtarget (intarrIs ,


intn , int sum) [

if (sum ==
0)
return 1 :

else if (n = =
0)
return O ;

if Jarr[n][sum] ! = -

1)
return arr [n][sum] ;

if (arr[n-1] <= sum)


In-1)) +
return dp[n][sum] =
subsetsumtarget(arr ,
n-1 ,
sum-ar r

subsetsumtargst(arr ,
n-1 , sum) ;
else
Return [sum] subsetsumtarget(arr n-1 sum) ;
dp[n] , ,
=

3
🔗
Subsetsum

Minimum sum partition

>
- sum/2
0 12345

O O 000 0 O


10

20

n30

4 O
dp[c + 1] [n 1] +
;
50
book subsetsum (intarrIs intn int sum) ?
dp[n] [sum]
, ,

>
-
6 o T
if (sum == 0)
return 1 :

dp[n] [sum-2]dp [n] [sum-1]


else if (n = =
0)
return O ;

if Jarr[n][sum] ! = -

1)
return arr [n][sum] ;

if (arr[n-1] <= sum)


return dp[n][sum] =
subsetsum(arr ,
n-1 ,
sum-arr In-1)) 11

subsetsum(arr ,
n-1 , sum) ;
else
Return dp[n] [sum] =
subsetsum(arr ,
n-1 , sum) ;

int subsetsummin (intarr [S ,


intn , int sum) [
sumsetsum (arr ,
n , sum/2) :

int val = 0 ;

for (inti =
sum/2 ; j) = 0 ; j -

-) [
if (dp[n] [i] = =
1) (
val =
j ;

break ;

3
3
return (sum-2 * val) ;

3
Rod Problem
Cutting Similar like

Unbounded Knapsack

04 % length of Rod =
Capacity

n
price
3
10 + 7 + 7 =
24 =
an size
n = w
w =

length of Rod

I'll WEIS =
Length [

4X8 = 32

4) 1,
2
3
3 4 5
, / 1 667 ,
8

I
2 6

17 + 5

= 22

-
2
Longest common Subsequence [Length] Woot same

x = BTT A I TD Same [BcDaac] *


Y = A
- &
B A
[BcDaac] [ac [] D B +

CDAC -> 4
[A ca]( D

[BcDAac8]
[m -dia]

int
longes (string X ,
string) ,
int m ,
intn) [
if (m = =
0 ((n = =
0) [m 1] En 1) 1
dp + + =-

return O ;
int
longes (string X ,
string) ,
int m ,
intn) [
if (n [m -

1] = =
y [n 1]) -

0)
pif(m
= =
0 ((n = =

return 1 +
longes (2 , 7, M-1 , n-1) ;
return O ;

else if (dp[m] [n) ! = -

1)
return man
(longes (x , Y, M-1 , n) , longes (x , 7, m , n-1)) ; return dp[m][n] ;

3
if (n [m 1] y [n 1])

I
- -
= =

return dp[m][n] =
1 +
Longes (2 , 7, M-1 , n-1) ;

else

Return dp[m][n] = mar


(longes (2 , Y, M-1 , n) , longes (x , 7, m , n-1)) ;

3
dP [m 1] [n 1]
+ +
I
>
-

(string 12
A

int
longes X ,
string) ,
int m ,
intn) [ O

O 00 0 0 0


Al O

for
(inti = 0 ; i) = m ; i+ + ) & B2 O

for
(inti = 0 ; j = nii + +
)4 xD3 O

B4 O

if (i 0)
Pl
= = li = =

150

dp[i] [i] =
0 AG0 T

else I

13)

((if(x(i
-

x) = =
sti -

di[i][i] =
1 + dp[i-1] [i 1]
-

else

dp[i][i] =
max
(ep[i-1] [i] ep[i][i-1)
,
;

3
3
3
return dp[m] [n] ;

3
Longest common
Substring [Length] dp [m 1] En 1)
+ + =- 1

int
longes (string X ,
string) ,
int m ,
intn) [
x BC D A A CD
0)
pif(m
=

= =
0 ((n = =

Y = A C D B A C
return O ;

if (dp[m] [n) ! = -

1)

return dp[m][n]
Same ;

[Bc DAac] (x [m y[n 13)


1)
if -

1 = =
-

-
return dp[m][n]
Longes (2 n-1)
Ba] 1 ;
[Ac
= + , 7, M-1 ,
D

dP [m 1] [n 1]
+ +

int
longes (string X ,
string) ,
int m ,
intn) [ int
longes (string X ,
string) ,
int m ,
intn) [
if (m = =
0 ((n = =
0) for
(inti = 0 ; i) = m ; i+ + ) &
return O ;
for
(inti = 0 ; j = nii + +
)4
(n [m 1] y [n 1])
/lif(i
if
0)
- -
= =
= = 11i = =

return 1 +
longes (2 , 7, M-1 , n-1) ; dp[i] [i] =
0

else I
3 if (n [i 1) x[i 1))
1)
= =
-
-

di[i][i] =
1 + dp[i-1] [i 1] -

3
3
3
return dp[m] [n] ;

3
dP [m 1] [n 1]
+ +

Longest common Subsequence [string]


String longes (string intn) [
int m
X ,
string) , ,

x = BTT A I TD for
(inti = 0 ; i) = m ; i+ + ) &
for
(inti = 0 ; j = nii + +
)4
Y = A
-
CDB A
(i 0)
-

if = = 11 i = =

CDAC
dp[i] [i] =
0

Woot same
else I

En ·
Same B C D A A
if (x [i -

1) = =
>[i -

1])
DAac]
C D B

[Bc di[i][i] =
1 + dp[i-1] [i 1] -

[Ac D a B

EB D A a c8] else

[A <DB A] dp[i][i] =
max
(ep[i-1] [i] ep[i][i-1)
,
;

3
3
- Y
int i j
1
A = m = m ;
,

⑧ 5
"n
O O O 00
String
0 0 S =
;

↓ (020 i 0) &
Al O

while <
B2 O

xD3 O U Z

- 1 + x
if (x [i -

1) = =
y [i -

1))h
S

B4 O Y

9 S x[i) + S ;
(2 z)
=
man

150 Y
,

(1 + x) man
(1 z)
i--
,

;
6 E - - - -

- -JA [ -]A
Y
-

O
- - -
-

I - - - -

-JA I - - -
-

>B
-

j - -

3
else [
if
(dp[i][j -

1) < dp[i 1] [i]) -

j -- ;

else
i --
;

return Si
3
Shortest common supersequence
: -

U :

Y :
"brute"

"groot"
-
merge Or uDe5t &
5+ 5 -
2 = 8
=
bq2uoot e

D +
R .

length +
y .

Length -

Longes (2 , y ,
---)
g200u e

* bqr0uot e
Count the no of
insertion/deletion to convert string
.
-
5 3 =
2

rahul
K :
t ahu
=>
J pahau
u
:

3

Pfahaul
1 + 1 + 1 + 1
common =
Longs (2 , y ,
m
,
n)
=
4
deletion Len (n) common

(insertion deletion)
=
-

insertion =
Len(s) -
common

Ans = insertion + deletion

=
Len (n) -
Common + Len(s) -
common

=
Len(n) + Len(s) -

2 x common

You might also like