二分法解決最大值最小化問題

2021-07-06 11:11:49 字數 687 閱讀 2526

把乙個包含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,不是最小。

要解決最大值最小化的問題,基本思路就是選取任意乙個範圍(輸入陣列的最大值到陣列所有元素的和),然後在這個範圍內進行二分法,每次把和範圍的中間值mid當作最小值,然後判斷在mid值下陣列是否能夠被分為m個部分

#include 

int n,m;

bool judge(const

int *a,int key)

}if((count+1)<=m)

return

1; return0;}

void binary(const

int *a,int left,int right)

else

}printf("%d\n",left); // ,right %d

}int main()

} binary(a,left,right);

}

return

0;

}

二分法解決最大值最小化問題

問題描述 把乙個包含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 ...

基礎演算法 二分法 最大值最小化

有乙個序列,將其劃分成3個連續的子串行s 1 s 2 s 3 每個子串行最少有乙個元素,要求使得每個子串行的和的最大值最小 輸入 622 3451 輸出 來自 大佬傳送門 include include using namespace std define n 10 define inf 1000 ...

二分 最小化最大值

注意答案的二分性質,必須要滿足在滿足給定條件的所有情況的時候都滿足要求才能更新ans。include using namespace std typedef long long ll inline ll in while c 0 c 9 res res 10 c 48,c getchar retur...