Menu
CoddyTech

Book Allocation Problem

Sebuah rak menyimpan buku dalam urutan tetap, dan pages[i] adalah jumlah halaman dalam buku i. Bagikan buku-buku tersebut kepada students siswa: setiap siswa mendapat satu rangkaian buku berdekatan yang tidak terputus, minimal satu buku untuk setiap siswa, dan setiap buku diberikan tepat kepada satu siswa. Beban seorang siswa adalah total jumlah halaman yang mereka terima.

Kembalikan nilai terkecil yang mungkin untuk beban terberat. Jika jumlah siswa lebih banyak daripada jumlah buku, kembalikan -1.

Fungsi

allocateBooks(pages: integer-array, students: integer) → integer
pagesinteger-array
jumlah halaman setiap buku, sesuai urutan di rak
studentsinteger
jumlah siswa yang berbagi buku
Mengembalikaninteger
beban terberat sekecil mungkin, atau -1 jika jumlah siswa lebih banyak daripada jumlah buku

Batasan

  • 1 ≤ pages.length ≤ 5000
  • 1 ≤ pages[i] ≤ 105
  • 1 ≤ students ≤ 104
  • Kembalikan -1 saat students > pages.length.

Contoh

Input
pages = [25, 40, 15, 30, 50]students = 3
Output
65
Penjelasan
Bagikan [25, 40], [15, 30], dan [50]: muatannya 65, 45, dan 50. Batas 64 tidak berhasil: pembagian menghasilkan [25], [40, 15], [30], [50], empat siswa.
challenge icon

Pertanyaan lanjutan

Buktikan bahwa rata-rata bagian, dibulatkan ke atas, ditambah buku paling tebal selalu menjadi batas yang valid. Berapa banyak pemeriksaan yang dihemat oleh batas atas itu pada rak berisi buku-buku tipis?

Reset kode
def allocateBooks(pages, students):
    # Tulis kodemu di sini

Tes #1

Tes #2

Tes #3

Argumen

pages = [25, 40, 15, 30, 50]
students = 3

Output yang diharapkan

65