Day 21 - Java

Problem Statement:

You are tasked with processing Aadhaar applications over a period of N consecutive days. Each day, a certain number of applications are received, and you have a limited processing capacity for each day. Your goal is to maximize the number of Aadhaar applications processed over these N days. Write a program to determine the maximum number of applications that can be processed.

Input Format:

The input consists of:

The first line contains an integer N (1 ≤ N ≤ 10^5) denoting the number of consecutive days.

The second line contains N space-separated integers, where the ๐‘–th integer represents the number of Aadhaar applications received on the ๐‘–th day.

The third line contains N space-separated integers, where the ๐‘–th integer represents the processing capacity for the ๐‘–th day.

Output Format:

Print the maximum number of Aadhaar applications that can be processed over the N days.

Constraints:

1 ≤ Number of applications received each day ≤ 10^4

1 ≤ Processing capacity for each day ≤ 10^4

Algorithm:

Initialize an array dp of size N to store the maximum number of applications processed up to each day.

Set dp[0] to the minimum of the applications received on day 1 and the processing capacity on day 1.

Iterate over the remaining days (from day 2 to day N):

Set dp[i] to the minimum of the applications received on the ๐‘–th day and the processing capacity on the  ๐‘–th day plus dp[i-1].

The maximum number of applications processed over the N days is dp[N-1].

Explanation:

The algorithm uses dynamic programming to calculate the maximum number of applications processed over the N days. At each day, it considers whether it's better to process the applications received on that day or to carry over the processing capacity from the previous day. By iteratively updating the maximum processed applications, it ensures that the final result reflects the optimal solution.

Sample Input:

5

10 7 12 15 8

5 8 10 12 6

Sample Output:

40

Test Cases:

Input:

3

20 30 40

10 20 30

Output:

60


Input:

4

15 25 35 45

10 20 30 40

Output:

100


Input:

2

10 20

15 25

Output:

30


Input:

1

5

10

Output:

5


Input:

6

5 5 5 5 5 5

5 5 5 5 5 5

Output:

30


SOLUTION:

import java.util.Scanner;


public class MaxProcessedAadhaar {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();

        int[] applications = new int[n];

        int[] capacity = new int[n];


        for (int i = 0; i < n; i++) {

            applications[i] = sc.nextInt();

        }


        for (int i = 0; i < n; i++) {

            capacity[i] = sc.nextInt();

        }


        int[] dp = new int[n];

        dp[0] = Math.min(applications[0], capacity[0]);


        for (int i = 1; i < n; i++) {

            dp[i] = Math.min(applications[i], capacity[i]) + dp[i - 1];

        }


        System.out.println(dp[n - 1]);

    }

}


Insights:

  • Two arrays applications and capacity are initialized to store the number of Aadhaar applications received each day and the processing capacity for each day, respectively.
  • The program iterates over the input integers and populates the applications array with the number of applications received each day. Similarly, it populates the capacity array with the processing capacity for each day.
  • An array dp of size n is initialized to store the maximum number of applications processed up to each day.
  • The program initializes dp[0] to the minimum of the applications received on the first day and the processing capacity on the first day.
  • It then iterates over the remaining days (from day 2 to day n) and calculates the maximum number of applications processed up to each day using dynamic programming.
  • At each day i, the maximum processed applications are updated as the minimum of the applications received on that day and the processing capacity on that day plus the maximum processed applications up to the previous day (dp[i-1]).
  • The maximum number of applications processed over the n days is obtained from dp[n-1] and printed as the output.
  • The time complexity of the program is O(n) because it iterates over the input arrays once to calculate the dynamic programming array dp.
  • Dynamic programming involves solving smaller parts of a problem just once and then reusing those solutions as needed. This "solve once, use many times" approach helps in avoiding redundant work, making solutions more efficient.
Be as unique in your code as an Aadhaar card is in its identity.

Enjoy and Code! :)

Comments

  1. Wow !! That was really useful and has clear insights on dp !!

    ReplyDelete

Post a Comment