看到題目的問法,就覺得這一般是一道二分答案的問題。然後寫了一下發現寫起來還是挺容易的,然後就全wa了,沙比一般沒有把cnt初始化為1,就少了一段。
然後一修改,就80分了,很懵逼啊那乙個點,看了別人的分析才知道,判斷的時候並不能只是一段一段加,加超了就換一段,可能某個元素大於要判斷的x,加上直接就錯了。
可見二分答案的題目也要好好考慮,畢竟這類題目最關鍵的就在於驗證過程。
1 #include 2ac**3const
int maxn = 1e5 + 5;4
5int
n, m, num[maxn];
67 inline int check(int
x) 16}17
if (cnt > m) return0;
18else
return1;
19}2021
intmain()
25while (l
30 printf("%d"
, l);
31return0;
32 }
洛谷1181數列分段Section I
對於給定的乙個長度為n的正整數數列a i 現要將其分成連續的若干段,並且每段和不超過m 可以等於m 問最少能將其分成多少段使得滿足要求。貪心,每次把盡可能大的一段數分成一段。時間複雜度o n var n,m,i,j,ans longint a array 1.100000 of longint be...
洛谷P1181 數列分段
題目描述 對於給定的乙個長度為n的正整數數列a i 現要將其分成連續的若干段,並且每段和不超過m 可以等於m 問最少能將其分成多少段使得滿足要求。輸入輸出格式 輸入格式 輸入檔案divide a.in的第1行包含兩個正整數n,m,表示了數列a i 的長度與每段和的最大值,第2行包含n個空格隔開的非負...
洛谷 P1182 數列分段
這是一道典型的二分答案問題 最大值最小,最小值最大 關鍵是對於細節的處理。二分的框架 l max,r sum while l r else l m 1 cout 二分的框架是普遍使用的,關鍵是檢驗函式的設計,此處的檢驗函式的含義為 是否存在一種合法的劃分,使得每段的最大值都不大於m。設計好了檢驗函式...