問題描述:
把乙個包含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網易有道2023年校園招聘面試一面試題200
1 #include 2 #include 3 #include 4 #include 5view codeusing
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 }
最大值最小化
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 分別...