P2511 [HAOI2008]木棍分割

來源:互聯網
上載者:User

標籤:多少   esc   \n   動態   des   依次   haoi2008   ret   bool   

Description

有n根木棍, 第i根木棍的長度為Li,n根木棍依次連結了一起, 總共有n-1個串連處. 現在允許你最多砍斷m個串連處, 砍完後n根木棍被分成了很多段,要求滿足總長度最大的一段長度最小, 並且輸出有多少種砍的方法使得總長度最大的一段長度最小. 並將結果mod 10007。。。

Solution

二分答案+動態規劃

Code
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>const int mod = 10007;const int N = 50005;int l[N];bool judge(int lim, int n, int m) {    int used = 0, sig = 0;    for (int i = 1; i <= n; i += 1) {        if (sig + l[i] <= lim) sig += l[i];        else sig = l[i], used += 1;    }    return used <= m;}int s[N], p[N];int f1[N], f2[N];int get(int L, int n, int m) {    for (int i = 1; i <= n; i += 1)        s[i] = s[i - 1] + l[i];    for (int i = 1; i <= n; i += 1)        p[i] = std:: lower_bound(s, s + n + 1, s[i] - L) - s;    int *f = f1, *g = f2;    for (int i = 0; i <= n; i += 1) g[i] = 1;    int res = 0;    for (int i = 1; i <= m + 1; i += 1) {        for (int j = 1; j <= n; j += 1) {            f[j] = (g[j - 1] - g[p[j] - 1]) % mod;        }        res = (res + f[n]) % mod;        f[0] = 0;        for (int j = 1; j <= n; j += 1)            f[j] = (f[j - 1] + f[j]) % mod;        std:: swap(f, g);    }    return (res + mod) % mod;}int main () {    int n, m, Mx = 0, Ma = 0;    scanf("%d%d", &n, &m);    for (int i = 1; i <= n; i += 1)        scanf("%d", &l[i]), Mx += l[i], Ma = std:: max(Ma, l[i]);    int l = Ma, r = Mx, mid;    while (l <= r) {        mid = l + r >> 1;        if (judge(mid, n, m)) r = mid - 1;        else l = mid + 1;    }    printf("%d ", l);    printf("%d\n", get(l, n, m));    return 0;}

P2511 [HAOI2008]木棍分割

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.