九度1502 最大值最小化問題

2022-08-11 13:03:13 字數 1878 閱讀 4579

問題描述:

把乙個包含n個正整數的序列劃分成m個連續的子串行。設第i個序列的各數之和為s(i),求所有s(i)的最大值最小是多少?

例如序列1 2 3 2 5 4劃分為3個子序列的最優方案為 1 2 3 | 2 5 | 4,其中s(1),s(2),s(3)分別為6,7,4,那麼最大值為7;

如果劃分為 1 2 | 3 2 | 5 4,則最大值為9,不是最小。

[2018.3.18補充]

就是不斷去嘗試那個最大值m, 如果以m為最大值看看是不是能劃分m個子序列,如果可以的話,那麼就可以往小了再試試,如果根本不能劃分m個子序列,會剩下一些數,那麼最大值就要變大一點

參考部落格:

這個答案就是介於這六個數最大值和總和之間的乙個,然後就二分查詢,判斷是否mid可以,

判斷mid就是乙個迴圈看看是否最多插m - 1(少沒事,多就不行)

個空,是每一段和少於等於mid。

題目1502:最大值最小化

時間限制:1 秒

記憶體限制:128 兆

特殊判題:

提交:540

解決:201

題目描述:在印刷術發明之前,複製一本書是乙個很困難的工作,工作量很大,而且需要大家的積極配合來抄寫一本書,團隊合作能力很重要。

當時都是通過招募抄寫員來進行書本的錄入和複製工作的, 假設現在要抄寫m本書,編號為1,2,3...m, 每本書有1<=x<=100000頁, 把這些書分配給k個抄寫員,要求分配給某個抄寫員的那些書的編號必須是連續的。每個抄寫員的速度是相同的,你的任務就是找到乙個最佳的分配方案,使得所有書被抄完所用的時間最少。

輸入:輸入可能包含多個測試樣例。

第一行僅包含正整數 n,表示測試案例的個數。

對於每個測試案例,每個案例由兩行組成,在第一行中,有兩個整數m和 k, 1<=k<=m<=500。 在第二行中,有m個整數用空格分隔。 所有這些值都為正且小於100000。

輸出:對應每個測試案例,

輸出一行數字,代表最佳的分配方案全部抄寫完畢所需要的時間。

樣例輸入:

2

9 3100 200 300 400 500 600 700 800 900

5 4100 100 100 100 100

樣例輸出:

1700

200

網易有道2023年校園招聘面試一面試題

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;

6const

int max = 500 + 10;7

intm,k;

8int

a[max];

9bool is_ok(int

maxn)

1020

if(s + a[i] >maxn)

2129}30

else

3134}35

return

ok;36}37

int solve(int x, int

y)38

47return

x;48}49

intmain()

5064 printf("

%d\n

", solve(maxn, sum));65}

66return0;

67 }

view code

最大值最小化

1 目標學會用猜數字 二分 的方法,換個角度來解決問題 2 include3 include 4 include5 const int n 100000 6 7int a n n,m,max 89 void input 1018 19 20bool is part int x 是否能把序列劃分為每個...

最大值最小化問題 分治

問題描述 把乙個包含n個正整數的序列劃分成m個連續的子串行。設第i個序列的各數之和為s i 求所有s i 的最大值最小是多少?例如序列1 2 3 2 5 4劃分為3個子序列的最優方案為 1 2 3 2 5 4,其中s 1 s 2 s 3 分別為6,7,4,那麼最大值為7 如果劃分為 1 2 3 2 ...

最大值最小化 題解

題目描述 把乙個包含 n 個正整數的序列劃分為 m 個連續的子串行 每個正整數恰好屬於乙個序列 設第 i 個序列的各數之和為 s i 你的任務是讓所有 s i 的最大值盡量小。例如序列 1 2 3 2 5 4 劃分成 3 個序列的最優方案為 1 2 3 2 5 4,其中 s 1 s 2 s 3 分別...