×

String Coding Problems

Arrays Coding Problems

Sorting Coding Problems

Searching Coding Problems

Coding Algorithms

Tree Coding Problems

Stack Coding Problems

Linked list Coding Problems

Graph Coding Problems

Greedy Algorithms Coding Problems

Dynamic Programming Coding Problems

Matrix Coding Problems

Recursion Coding Problems

Number Theory Coding Problems

Backtracking Coding Problems

Heap Coding Problems

Brute Force Coding Problems

Implementation Coding Problems

Google Contests

Competitive Programming Coding

Miscellaneous

Letter/Blog Writer Coding Problem (using Dynamic Programming)

Letter/Blog Writer Coding Problem: In this article, we are going to see how to solve a Letter/Blog Writer Coding Problem efficiently with dynamic programming? And, it can be featured in any interview rounds. Submitted by Radib Kar, on April 19, 2020

Problem statement

Shivang is a blog writer and he is working on two websites simultaneously. He has to write two types of blogs which are:

  • Technical blogs for website_1: X of this type can be written in an hour. (X will be the input)
  • Fun blogs for website_2: Y of this type can be written in an hour. (Y will be input)

You are to help him to save time. Given N number of total blogs, print the minimum number of hours he needs to put for combination of both the blogs, so that no time is wasted.

    Input:
    N: number of total blogs
    X: number of Technical blogs for website_1 per hour
    Y: number of Fun blogs for website_2 per hour

    Output:
    Print the minimum number of hours Shivang needs to write the 
    combination of both the blogs (total N). 
    If it is NOT possible, print "−1". 

Example

    Input:
    N: 33
    X: 12
    Y: 10
    
    Output:
    -1 
    
    Input:
    N: 36
    X: 10
    Y: 2
    
    Output:
    6 (10*3+2*3)

Explanation

    For the first case,
    No combination is possible that's why output is -1.
    
    For the second test case,
    Possible combinations are 30 technical blogs (3 hours) + 6 fun blogs (3 hours)
    20 technical blogs (2 hours) + 16 fun blogs (8 hours)
    10 technical blogs (1 hours) + 26 fun blogs (13 hours)
    0 technical blogs (0 hours) + 36 fun blogs (18 hours)
    
    So, best combination is the first one which takes total 6 hours

The problem is basically solving equation,

aX + bY = N where we need to find the valid integer coefficients of X and Y. Return a+b if there exists such else return -1.

We can find a recursive function for the same too,

Say,

    f(n) = minimum hours for n problems
    f(n) = min(f(n-x) + f(n-y)) if f(n-x), f(n-y) is solved already

We can convert the above recursion to DP.

Solution Approach

Converting the recursion into DP:

    1)  Create DP[n] to store sub problem results
    2)  Initiate the DP with -1 except DP[0], DP[0]=0
    3)  Now in this step we would compute values for DP[i]
    4)  for i=1 to n
            if i-x>=0 && we already have solution for i-x,i.e.,DP[i-x]!=-1 
                DP[i]=DP[i-x]+1;
            end if
            if i-y>=0 && we already have solution for i-y,i.e.,DP[i-y]!=-1)
                if DP[i]!=-1
                    DP[i]=min(DP[i],DP[i-y]+1);
                else
                    DP[i]=DP[i-y]+1;
                End if
            End if
        End for

    5)  Return DP[n]

C++ Implementation

#include <bits/stdc++.h>
using namespace std;

int minimumHour(int n, int x, int y)
{
    int a[n + 1];
    a[0] = 0;
    for (int i = 1; i <= n; i++)
        a[i] = -1;
    for (int i = 1; i <= n; i++) {
        if (i - x >= 0 && a[i - x] != -1) {
            a[i] = a[i - x] + 1;
        }
        if (i - y >= 0 && a[i - y] != -1) {
            if (a[i] != -1)
                a[i] = min(a[i], a[i - y] + 1);
            else
                a[i] = a[i - y] + 1;
        }
    }
    return a[n];
}

int main()
{
    int n, x, y;
    cout << "Enter total number of blogs, N:\n";
    cin >> n;
    cout << "Enter number of techical blogs, X:\n";
    cin >> x;
    cout << "Enter number of fun blogs, Y:\n";
    cin >> y;

    cout << "Minimum hour to be dedicated: " << minimumHour(n, x, y) << endl;

    return 0;
}

Output

RUN 1:
Enter total number of blogs, N:
36
Enter number of techical blogs, X:
10
Enter number of fun blogs, Y:
2
Minimum hour to be dedicated: 6

RUN 2:
Enter total number of blogs, N:
33
Enter number of techical blogs, X:
12
Enter number of fun blogs, Y:
10
Minimum hour to be dedicated: -1


Comments and Discussions!

Load comments ↻





Copyright © 2024 www.includehelp.com. All rights reserved.