Allocate minimum number of pages Java
- Get link
- X
- Other Apps
PROGRAM TO FIND THE MINIMUM PAGES ASSIGNED FOR A STUDENT
Given number of pages in n different books and m students. The books are arranged in ascending order of number of pages. Every student is assigned to read some consecutive books. The task is to assign books in such a way that the maximum number of pages assigned to a student is minimum.
import java.util.*; import java.lang.*; import java.io.*; public class MAIN { // Utility method to check if current minimum value // is feasible or not. static boolean isPossible(int arr[], int n, int m, int curr_min) { int studentsRequired = 1; int curr_sum = 0; // iterate over all books for (int i = 0; i < n; i++) { // check if current number of pages are greater // than curr_min that means we will get the result // after mid no. of pages if (arr[i] > curr_min) return false; // count how many students are required // to distribute curr_min pages if (curr_sum + arr[i] > curr_min) { // increment student count studentsRequired++; // update curr_sum curr_sum = arr[i]; // if students required becomes greater // than given no. of students,return false if (studentsRequired > m) return false; } // else update curr_sum else curr_sum += arr[i]; } return true; } // method to find minimum pages static int findPages(int arr[], int n, int m) { long sum = 0; // return -1 if no. of books is less than // no. of students if (n < m) return -1; // Count total number of pages for (int i = 0; i < n; i++) sum += arr[i]; // initialize start as 0 pages and end as // total pages int start = 0, end = (int) sum; int result = Integer.MAX_VALUE; // traverse until start <= end while (start <= end) { // check if it is possible to distribute // books by using mid is current minimum int mid = (start + end) / 2; if (isPossible(arr, n, m, mid)) { // if yes then find the minimum distribution result = Math.min(result, mid); // as we are finding minimum and books // are sorted so reduce end = mid -1 // that means end = mid - 1; } else // if not possible means pages should be // increased so update start = mid + 1 start = mid + 1; } // at-last return minimum no. of pages return result; } // Driver Method public static void main(String[] args) { //Number of pages in books int arr[] = {12, 34, 67, 90}; int m = 2; //No. of students System.out.println("Minimum number of pages = " + findPages(arr, arr.length, m)); } } OUTPUT
Minimum number of pages = 113
- Get link
- X
- Other Apps
Comments
Post a Comment