Problem 4: Welcome to Code Jam (Hard)
https://open.kattis.com/problems/welcomehard
Given a string S
of length , find the number of times "welcome to code jam" appears as a subsequence in the string.
Idea: use a (n + 1) x 20 DP array to count the number of appearances. (There are 19 letters in the string "welcome to code jam".)
Let's keep track of the target string in a variable target = "welcome to code jam"
and the answer in an array dp[n+1][20]
(initialized to zeros).
For each char in the given string, compare it to each char "welcome to code jam". (Outer loop: go through each letter of the given string S
; inner loop: iterate over target
.) For the current char S[i]
and a char target[l]
, the count at S[i]
is equal to the count at S[i-1]
plus the count at S[i]
(with respect to target[l]
).
Base case:
dp[0][0] = 1
Recurrence relation:
dp[i + 1][l] = dp[i][l] + dp[i + 1][l]
Additionally, if S[i] == target[l]
, then we also have dp[i + 1][l + 1] = dp[i][l] + dp[i + 1][l + 1].
Otherwise if they are not equal, then we don't perform the extra addition.
At the end, the answer we are looking for is stored at dp[n][19]
.
Last updated