jzoj1481 偷懶的西西

2021-08-09 15:28:41 字數 1590 閱讀 8867

高三數學作業總共有n道題目要寫(其實是抄),編號1..n,抄每道題所花時間不一樣,抄第i題要花a[i]分鐘。由於西西還要準備noip,顯然不能成天做數學作業。所以西西決定只用不超過t分鐘時間抄這個,因此必然有空著的題。每道題要麼不寫,要麼抄完,不能寫一半。一段連續的空題稱為乙個空題段,它的長度就是所包含的題目數。這樣應付自然會引起數學老師的憤怒。數學老師發怒的程度(簡稱發怒度)等於最長的空題段長度。

現在,西西想知道他在這t分鐘內寫哪些題,才能夠盡量降低數學老師的發怒度。由於西西很聰明,你只要告訴他發怒度的數值就可以了,不需輸出方案。(someone:那麼西西怎麼不自己寫程式?西西:我還在抄別的科目的作業……)

第一行為兩個整數n,t,代表共有n道題目,t分鐘時間。

以下一行,為n個整數,依次為a[1], a[2],… a[n],意義如上所述。

僅一行,乙個整數w,為最低的發怒度。

60%資料 n<=2000

100%資料 0

簽到題。我們可以二分乙個最大連續空段,這樣就變成了乙個最多隔mid個不選的最小方案,f[i]=min+t[i] (i-mid-1<=j

#include 

#include

#include

#include

#include

#define rep(i, st, ed) for (int i = st; i <= ed; i += 1)

#define drp(i, st, ed) for (int i = st; i >= ed; i -= 1)

#define erg(i, st) for (int i = ls[st]; i; i = e[i].next)

#define fill(x, t) memset(x, t, sizeof(x))

#define max(x, y) ((x)>(y)?(x):(y))

#define min(x, y) ((x)<(y)?(x):(y))

#define abs(x) ((x)<(0)?(-(x)):(x))

#define inf 0x3f3f3f3f

#define n 100001

#define e 1001

#define l 1001

int queue[n], f[n], t[n];

inline int read()

inline bool check(int n, int m, int mid)

f[i] = f[queue[head]] + t[i];

while (f[queue[tail]] > f[i] && head <= tail)

queue[++ tail] = i;

}int ans = inf;

rep(i, n - mid, n)

return ans <= m;

}int main(void)

int l = 0;

int r = n;

int bobo = 0;

while (l <= r) else

}printf("%d\n", bobo);

return

0;}

1481 偷懶的西西

高三數學作業總共有n道題目要寫 其實是抄 編號1.n,抄每道題所花時間不一樣,抄第i題要花a i 分鐘。由於西西還要準備noip,顯然不能成天做數學作業。所以西西決定只用不超過t分鐘時間抄這個,因此必然有空著的題。每道題要麼不寫,要麼抄完,不能寫一半。一段連續的空題稱為乙個空題段,它的長度就是所包含...

《單調佇列》《二分》4 偷懶的西西

高三數學作業總共有n道題目要寫 其實是抄 編號1.n,抄每道題所花時間不一樣,抄第i題要花a i 分鐘。由於西西還要準備noip,顯然不能成天做數學作業。所以西西決定只用不超過t分鐘時間抄這個,因此必然有空著的題。每道題要麼不寫,要麼抄完,不能寫一半。一段連續的空題稱為乙個空題段,它的長度就是所包含...

JZOJ1402 偷懶的小X dfs

給出一組數,輸出字典序最大的滿足堆性質的排列。考慮某乙個情況時的最大值,一定是放在堆的葉子中。而且任意葉子均可。但是為了字典序盡量大,所以肯定放在dfs dfsdf s序最小的節點。所以我們就深度優先搜尋這棵二叉樹,當遞迴完這棵樹的子樹後,我們就將這個位置賦值為序列中還沒選擇的最大值。時間複雜度o ...