目描述
對於給定的乙個長度為n的正整數數列a[i],現要將其分成m(m≤n)段,並要求每段連續,且每段和的最大值最小。
關於最大值最小:
例如一數列4 2 4 5 1要分成3段
將其如下分段:
[4 2][4 5][1]
第一段和為6,第2段和為9,第3段和為1,和最大值為9。
將其如下分段:
[4][2 4][5 1]
第一段和為4,第2段和為6,第3段和為6,和最大值為6。
並且無論如何分段,最大值不會小於6。
所以可以得到要將數列4 2 4 5 1要分成3段,每段和的最大值最小為6。
輸入輸出格式
輸入格式:
輸入檔案divide_b.in的第1行包含兩個正整數n,m,第2行包含n個空格隔開的非負整數a[i],含義如題目所述。
輸出格式:
輸出檔案divide_b.out僅包含乙個正整數,即每段和最大值最小為多少。
輸入輸出樣例
輸入樣例#1:
5 34 2 4 5 1
輸出樣例#1:
#include#include#includeusing namespace std;
int a[10000];
int n,m,nmax;
int sum=0;
bool judge(int mid)
else
}if(ans>m)
return true;
else
return false;
}void work()
printf("%d",mid+1);
} void init() }
int main()
資料結構2 數列分段
題目2 數列分段 問題描述 給定乙個整數數列,數列中連續相同的最長整數序列算成一段,問數列中共有多少段?輸入格式 輸入的第一行包含乙個整數n,表示數列中整數的個數。第二行包含n個整數a1,a2,an,表示給定的數列,相鄰的整數之間用乙個空格分隔。輸出格式 輸出乙個整數,表示給定的數列有多個段。樣例輸...
數列分段 Section II
對於給定的乙個長度為n的正整數數列 a i 現要將其分成 m m n 段,並要求每段連續,且每段和的最大值最小。關於最大值最小 例如一數列 4 2 4 5 1 要分成 3 段 將其如下分段 42 45 1 第一段和為 6 第 2 段和為 9 第 3 段和為 1 和最大值為 9 將其如下分段 4 24...
數列分段 Section II
點我點我點我點我點我點我點我點我點我點我點我點我點我點我點我點我 二分答案 貪心 首先,分析題目,求最大值的最小化,直接聯想到二分,so我們直接二分答案,關鍵是要怎麼去高效的check,因為大家很容想到字首和,但實際上這個空間是可以省略的,為什麼呢?我們考慮乙個貪心的思路,能加的就加上,不能則新開一...