// with only one number, we can form a subset only when the required sum is equal to its value
for (int s = 1; s <= sum; s++) {
dp[0][s] = (num[0] == s ? true : false);
}
shouldnt it be
// with only one number, we can form a subset only when the required sum is equal to its value
for (int s = 1; s <= sum; s++) {
dp[0][s] = (num[s] == s ? true : false);
}