Bird
Raised Fist0
DSA Cprogramming~10 mins

Greedy vs DP How to Know Which to Apply in DSA C - Interactive Comparison Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to check if the problem has optimal substructure property.

DSA C
if (problem_has_optimal_substructure == [1]) {
    printf("Use DP\n");
} else {
    printf("Use Greedy\n");
}
Drag options to blanks, or click blank then click option'
A0
Btrue
C1
Dfalse
Attempts:
3 left
💡 Hint
Common Mistakes
Confusing optimal substructure with greedy choice property.
Using false instead of true for optimal substructure.
2fill in blank
medium

Complete the code to check if the problem has greedy choice property.

DSA C
if (problem_has_greedy_choice_property == [1]) {
    printf("Use Greedy\n");
} else {
    printf("Use DP\n");
}
Drag options to blanks, or click blank then click option'
A0
Bfalse
C1
Dtrue
Attempts:
3 left
💡 Hint
Common Mistakes
Assuming greedy choice property is always true.
Using false instead of true for greedy choice property.
3fill in blank
hard

Fix the error in the code that decides which algorithm to apply based on properties.

DSA C
if (has_optimal_substructure && [1]) {
    printf("Use DP\n");
} else if (has_greedy_choice_property) {
    printf("Use Greedy\n");
} else {
    printf("No simple solution\n");
}
Drag options to blanks, or click blank then click option'
A!has_greedy_choice_property
Bhas_greedy_choice_property
Ctrue
Dfalse
Attempts:
3 left
💡 Hint
Common Mistakes
Using has_greedy_choice_property instead of its negation.
Confusing the conditions for DP and greedy.
4fill in blank
hard

Fill both blanks to complete the function that decides algorithm type based on problem properties.

DSA C
const char* choose_algorithm(bool has_optimal_substructure, bool has_greedy_choice_property) {
    if (has_optimal_substructure && [1]) {
        return "DP";
    } else if ([2]) {
        return "Greedy";
    } else {
        return "No simple solution";
    }
}
Drag options to blanks, or click blank then click option'
A!has_greedy_choice_property
Bhas_greedy_choice_property
Chas_optimal_substructure
D!has_optimal_substructure
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing up the conditions for DP and greedy.
Using wrong negations.
5fill in blank
hard

Fill all three blanks to complete the code that prints the recommended algorithm based on problem properties.

DSA C
void print_algorithm(bool has_optimal_substructure, bool has_greedy_choice_property) {
    if (has_optimal_substructure && [1]) {
        printf("Use DP\n");
    } else if ([2]) {
        printf("Use Greedy\n");
    } else if ([3]) {
        printf("No simple solution\n");
    }
}
Drag options to blanks, or click blank then click option'
A!has_greedy_choice_property
Bhas_greedy_choice_property
C!has_optimal_substructure
Dtrue
Attempts:
3 left
💡 Hint
Common Mistakes
Not negating greedy choice property for DP condition.
Missing the always true condition for the last else if.

Practice

(1/5)
1. Which of the following best describes when to use a greedy algorithm instead of dynamic programming?
easy
A. When the problem has the greedy choice property and optimal substructure
B. When the problem requires checking all possible combinations
C. When the problem has overlapping subproblems but no greedy choice
D. When the problem is about sorting large datasets

Solution

  1. Step 1: Understand greedy choice property

    A greedy algorithm works when choosing the best option at each step leads to a global optimum.
  2. Step 2: Compare with dynamic programming conditions

    Dynamic programming is used when subproblems overlap and greedy choice property does not hold.
  3. Final Answer:

    When the problem has the greedy choice property and optimal substructure -> Option A
  4. Quick Check:

    Greedy choice property = Use greedy [OK]
Hint: Use greedy if local best leads to global best [OK]
Common Mistakes:
  • Confusing overlapping subproblems with greedy choice
  • Using greedy when problem needs full exploration
  • Assuming sorting problems always need greedy
2. Which of the following is the correct syntax to declare a memoization array for dynamic programming in C?
easy
A. int memo[1000] = {0};
B. int memo[] = 0;
C. int memo(1000) = {0};
D. int memo = new int[1000];

Solution

  1. Step 1: Recall C array declaration syntax

    In C, arrays are declared with fixed size and optional initialization using braces.
  2. Step 2: Check each option

    int memo[1000] = {0}; correctly declares an int array of size 1000 initialized to zero. Others are invalid C syntax.
  3. Final Answer:

    int memo[1000] = {0}; -> Option A
  4. Quick Check:

    C arrays use [] with size [OK]
Hint: Use int arr[size] = {0} for zero-initialized arrays [OK]
Common Mistakes:
  • Using parentheses instead of brackets for arrays
  • Trying to assign 0 directly to array
  • Using new keyword in C (it's C++ syntax)
3. What is the output of the following C code snippet that uses a greedy approach to select coins?
int coins[] = {1, 5, 10, 25};
int amount = 30;
int count = 0;
for (int i = 3; i >= 0; i--) {
    while (amount >= coins[i]) {
        amount -= coins[i];
        count++;
    }
}
printf("%d\n", count);
medium
A. 3
B. 4
C. 2
D. 5

Solution

  1. Step 1: Trace the greedy coin selection

    Start with coin 25: amount=30, 30>=25, subtract 25, amount=5, count=1.
  2. Step 2: Continue with smaller coins

    Next coin 10: amount=5<10, skip. Next coin 5: amount=5>=5, subtract 5, amount=0, count=2.
  3. Step 3: No more coins needed

    Loop ends, total coins used = 2.
  4. Final Answer:

    2 -> Option C
  5. Quick Check:

    25 + 5 = 30 using 2 coins [OK]
Hint: Subtract largest coin repeatedly until amount zero [OK]
Common Mistakes:
  • Counting coins incorrectly in loops
  • Not updating amount after subtraction
  • Confusing coin order in loop
4. The following code attempts to solve the Fibonacci sequence using a greedy approach. What is the error?
int fib(int n) {
    if (n <= 1) return n;
    int a = 0, b = 1, c = 0;
    for (int i = 2; i <= n; i++) {
        c = a + b;
        a = b;
        b = c;
    }
    return c;
}
medium
A. Loop should start from i = 1 instead of 2
B. No error, code correctly computes Fibonacci
C. Variable c is not initialized properly
D. Greedy approach is incorrect for Fibonacci calculation

Solution

  1. Step 1: Understand Fibonacci calculation

    Fibonacci requires summing previous two numbers, which is a classic dynamic programming problem.
  2. Step 2: Identify greedy approach misuse

    The code uses iteration correctly but calling it greedy is wrong because Fibonacci does not have greedy choice property.
  3. Final Answer:

    Greedy approach is incorrect for Fibonacci calculation -> Option D
  4. Quick Check:

    Fibonacci needs DP, not greedy [OK]
Hint: Fibonacci needs DP, greedy won't work [OK]
Common Mistakes:
  • Thinking iterative is greedy
  • Ignoring problem properties
  • Confusing initialization with error
5. You want to find the minimum number of coins to make change for a given amount using coins of denominations {1, 3, 4}. Which approach is best and why?
hard
A. Greedy, because always picking the largest coin works here
B. Dynamic Programming, because greedy fails for some amounts
C. Brute force, because both greedy and DP are too complex
D. Sorting coins and picking smallest first

Solution

  1. Step 1: Test greedy approach on example

    For amount 6, greedy picks 4 + 1 + 1 = 3 coins, but optimal is 3 + 3 = 2 coins.
  2. Step 2: Recognize overlapping subproblems

    Dynamic programming stores solutions for smaller amounts to build up answer correctly.
  3. Step 3: Conclude best approach

    Greedy fails due to lack of greedy choice property; DP handles all cases optimally.
  4. Final Answer:

    Dynamic Programming, because greedy fails for some amounts -> Option B
  5. Quick Check:

    Greedy fails, DP works [OK]
Hint: Test greedy on small cases; if fails, use DP [OK]
Common Mistakes:
  • Assuming greedy always works for coin change
  • Ignoring counterexamples
  • Choosing brute force unnecessarily
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard