洛谷 P1181數列分段SectionI 貪心

2022-06-26 03:27:14 字數 1190 閱讀 1804

對於給定的乙個長度為nn的正整數數列a_iai​,現要將其分成連續的若干段,並且每段和不超過mm(可以等於mm),問最少能將其分成多少段使得滿足要求。

輸入格式:

第1行包含兩個正整數n,mn,m,表示了數列a_iai​的長度與每段和的最大值,第22行包含nn個空格隔開的非負整數a_iai​,如題目所述。

輸出格式:

乙個正整數,輸出最少劃分的段數。

輸入樣例#1: 複製

5 6

4 2 4 5 1

輸出樣例#1: 複製

3

對於20\%20%的資料,有n≤10n≤10;

對於40\%40%的資料,有n≤1000n≤1000;

對於100\%100%的資料,有n≤100000,m≤10^9n≤100000,m≤109,mm大於所有數的最小值,a_iai​之和不超過10^9109。

將數列如下劃分:

[4][2 4][5 1][4][24][51]

第一段和為44,第22段和為66,第33段和為66均滿足和不超過m=6m=6,並可以證明33是最少劃分的段數。

題意:

把n個數列分成連續的m組,每一組的和不超過m

思路:

只要這一段連續的數列的和不超過m就盡量讓他們成為一組。乙個組能並多少並多少,乙個數能盡量早被歸進乙個組就盡量早。

1

//#include

2 #include

3 #include4 #include5 #include6 #include7 #include8 #include9 #include10

11using

namespace

std;

1213

intn, m;

14const

int maxn = 1e5 + 5;15

inta[maxn];

1617

intmain()

1823

int cnt = 0, tsum = 0;24

for(int i = 0; i < n; i++)

28else32}

33 printf("

%d\n

", cnt + 1

);34

return0;

35 }

洛谷P1181 數列分段

題目描述 對於給定的乙個長度為n的正整數數列a i 現要將其分成連續的若干段,並且每段和不超過m 可以等於m 問最少能將其分成多少段使得滿足要求。輸入輸出格式 輸入格式 輸入檔案divide a.in的第1行包含兩個正整數n,m,表示了數列a i 的長度與每段和的最大值,第2行包含n個空格隔開的非負...

洛谷 P1181 數列分段Section I

題目描述 對於給定的乙個長度為n的正整數數列a i 現要將其分成連續的若干段,並且每段和不超過m 可以等於m 問最少能將其分成多少段使得滿足要求。輸入輸出格式 輸入格式 輸入檔案divide a.in的第1行包含兩個正整數n,m,表示了數列a i 的長度與每段和的最大值,第2行包含n個空格隔開的非負...

洛谷 P1181 數列分段Section I

題目描述 對於給定的乙個長度為n的正整數數列a i 現要將其分成連續的若干段,並且每段和不超過m 可以等於m 問最少能將其分成多少段使得滿足要求。輸入輸出格式 輸入格式 輸入檔案divide a.in的第1行包含兩個正整數n,m,表示了數列a i 的長度與每段和的最大值,第2行包含n個空格隔開的非負...