Description

求 \(n\) 根木棍长度为 \(L\) ,分成 \(m\) 份,使最长长度最短,并求出方案数.

Sol

二分+DP.

二分很简单啊,然后就是方案数的求法.

状态就是 \(f[i][j]\) 表示前 \(i\) 根木棍,分成 \(j\) 份的方案数.

然后就是转移,我们发现这个转移是 \(O(n)\) 的,但他是一个前缀和的形式.

因为决策点单调,我们可以用尺取法求出最远范围,然后用前缀和搞一下就可以了.

空间开不下可以滚qwq.

Code

/**************************************************************
Problem: 1044
User: BeiYu
Language: C++
Result: Accepted
Time:4912 ms
Memory:2264 kb
****************************************************************/ #include<cstdio>
#include<cstring>
#include<iostream>
using namespace std; const int N = 50005;
const int M = 1005;
const int p = 10007; int n,m,l,r,t,mid,lim,ans;
int a[N],b[N],c[N];
int f[2][N]; inline int in(int x=0,char ch=getchar()){ while(ch>'9'||ch<'0') ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; }
int check(int x){
int nd=0,tmp=0;
for(int i=1;i<=n;i++) if(tmp+a[i]>x) tmp=a[i],nd++;else tmp+=a[i];
if(tmp) nd++;
return nd<=m;
}
int main(){ n=in(),m=in()+1;
for(int i=1;i<=n;i++) a[i]=in(),b[i]=b[i-1]+a[i],r+=a[i],l=max(l,a[i]); while(l<=r){
mid=(l+r)>>1;
if(check(mid)) r=mid-1;
else l=mid+1;
}cout<<l<<" "; lim=l,l=1,t=0; for(int i=1;i<=n;i++){
t+=a[i];
while(t>lim) t-=a[l++];
c[i]=l;
} // for(int i=1;i<=n;i++) cout<<c[i]<<" ";cout<<endl; int cur=1;
for(int i=0;i<=n;i++) f[0][i]=1;
for(int i=1;i<=m;i++){
memset(f[cur],0,sizeof(f[cur]));
for(int j=1;j<=n;j++){
f[cur][j]=((f[cur][j-1]+f[cur^1][j-1]-f[cur^1][c[j]-2])%p+p)%p;
}ans=((ans+f[cur][n]-f[cur][n-1])%p+p)%p,cur^=1;
}cout<<ans<<endl;
return 0;
}

  

BZOJ 1044: [HAOI2008]木棍分割的更多相关文章

  1. BZOJ 1044: [HAOI2008]木棍分割(二分答案 + dp)

    第一问可以二分答案,然后贪心来判断. 第二问dp, dp[i][j] = sigma(dp[k][j - 1]) (1 <= k <i, sum[i] - sum[k] <= ans ...

  2. [BZOJ 1044] [HAOI2008] 木棍分割 【二分 + DP】

    题目链接:BZOJ 1044 第一问是一个十分显然的二分,贪心Check(),很容易就能求出最小的最大长度 Len . 第二问求方案总数,使用 DP 求解. 使用前缀和,令 Sum[i] 为前 i 根 ...

  3. bzoj 1044 [HAOI2008]木棍分割(二分+贪心,DP+优化)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1044 [题意] n根木棍拼到一起,最多可以切m刀,问切成后最大段的最小值及其方案数. ...

  4. BZOJ 1044: [HAOI2008]木棍分割 DP 前缀和优化

    题目链接 咳咳咳,第一次没大看题解做DP 以前的我应该是这样的 哇咔咔,这tm咋做,不管了,先看个题解,再写代码 终于看懂了,卧槽咋写啊,算了还是抄吧 第一问类似于noip的那个跳房子,随便做 这里重 ...

  5. bzoj 1044 [HAOI2008]木棍分割——前缀和优化dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1044 前缀和优化. 但开成long long会T.(仔细一看不用开long long) #i ...

  6. bzoj 1044: [HAOI2008]木棍分割【二分+dp】

    对于第一问二分然后贪心判断即可 对于第二问,设f[i][j]为已经到j为止砍了i段,转移的话从$$ f[i][j]=\sigema f[k][j-1] (s[j]-s[k-1]<=ans) 这里 ...

  7. 1044: [HAOI2008]木棍分割

    1044: [HAOI2008]木棍分割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2161  Solved: 779[Submit][Statu ...

  8. 【BZOJ】1044: [HAOI2008]木棍分割 二分+区间DP

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1044 Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, ...

  9. 【BZOJ】1044: [HAOI2008]木棍分割(二分+dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1044 如果只求最大的最小,,直接二分就行了...可是要求方案.. 好神! 我竟然想不到! 因为我们得 ...

随机推荐

  1. ubuntu下JDK的安装

    硬盘上有下载好的JDK,直接解压后配置profile环境变量就行 export JAVA_HOME=/usr/lib/jvm/java-8-oracle export JRE_HOME=${JAVA_ ...

  2. CodeForces 710A King Moves(水题-越界问题)

    题目链接:http://codeforces.com/problemset/problem/710/A 题目大意:在一个棋盘中给出一个位置,判断该位置周围8个点还有几个点可以摆放棋子. AC代码解释解 ...

  3. Windows Platform Predefined Macros

    https://msdn.microsoft.com/en-us/library/b0084kay.aspx

  4. php mysql实体字符

    问题描述:php提交数据的时候遇到特殊符号,需要转义才可以提交数据 如:提交单引号,双引号... php代码: $str = "我但是'sdf6448"; $data['goods ...

  5. apk支持html video控制 ,是播放状态就暂停,暂停状态就播放

    apk支持html video控制 <!DOCTYPE html> <html> <body> <div style="text-align:cen ...

  6. CentOS6.5个人目录下中文路径转英文路径

    如果安装了中文版到CentOS之后,root目录及home目录下会出现中文到路径名,如“桌面”.“文档”,“图片 .公共的” .“下载”. “音乐”.“ 视频”等目录,这样在命令行上操作十分到不方便. ...

  7. Python 文件读写,条件循环(三次登录锁定账号实例)

    通过文件读写,条件循环相关语法,实现三次登录失败则锁定该账号的功能 需求一 """需求描述: 1.输入正确账号,密码,退出程序 2.登录失败,重新输入账号密码 3.同一账 ...

  8. Aspect Oriented Programming using Interceptors within Castle Windsor and ABP Framework AOP

    http://www.codeproject.com/Articles/1080517/Aspect-Oriented-Programming-using-Interceptors-wit Downl ...

  9. org.apache.http.client.HttpClient; HttpClient 4.3超时设置

    可用的code import org.apache.commons.lang.StringUtils;import org.apache.http.HttpEntity;import org.apac ...

  10. ASP.NET MVC WebGrid – Performing true AJAX pagination and sorting 【转】

    ASP.NET MVC WebGrid – Performing true AJAX pagination and sorting FEBRUARY 27, 2012 14 COMMENTS WebG ...