Dynamic Programming (DP)
Dynamic Programming (DP)
0-1 Knapsack
int knap (int C ,
intvalt] ,
intWtIS ,
intn) &
if (n = = 0 11 ( = = 0)
dp[c 1] [n 1]
+ +
;
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) =
,
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
dp[c 1] [n 1]
+ +
;
else if (n = =
0)
return O ;
if Jarr[n][sum] ! = -
1)
return arr [n][sum] ;
subsetsum(arr ,
n-1 , sum) ;
else
Return dp[n] [sum] =
subsetsum(arr ,
n-1 , sum) ;
3
🔗
Sum Partition
Equal
dp[c 1] [n 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
45
Return =
, , ;
7 6, ,
20 ,
, ,
3
V Hv
↓
23 23
int Sum = 0 ;
if (sum % 2 ! =
0)
return false ;
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]
+ +
;
if (sum ==
0)
return 1 :
else if (n = =
0)
return O ;
if Jarr[n][sum] ! = -
1)
return arr [n][sum] ;
subsetsumtargst(arr ,
n-1 , sum) ;
else
Return [sum] subsetsumtarget(arr n-1 sum) ;
dp[n] , ,
=
3
🔗
Subsetsum
>
- 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 :
↓
↓
if Jarr[n][sum] ! = -
1)
return arr [n][sum] ;
subsetsum(arr ,
n-1 , sum) ;
else
Return dp[n] [sum] =
subsetsum(arr ,
n-1 , sum) ;
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
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 ;
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
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 ;
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]
+ +
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 -
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
=
Len (n) -
Common + Len(s) -
common
=
Len(n) + Len(s) -
2 x common