二分+dp.

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 50050
#define mod 10007
using namespace std;
int n,m,l[maxn],len,sums=,lb[maxn],dp[maxn][],sum[maxn][],mx=,ans=;
bool check(int len)
{
int now=l[],ret=;
for (int i=;i<=n;i++)
{
if (now+l[i]>len) {ret++;now=l[i];}
else now+=l[i];
}
return ret<=m;
}
void binary_search()
{
int l=mx,r=sums;
while (l<=r)
{
int mid=(l+r)>>;
if (check(mid)) {len=mid;r=mid-;}
else l=mid+;
}
}
void get_bnd()
{
int ret=,now=;
for (int i=;i<=n;i++)
{
ret-=l[i-];
while ((ret+l[now+]<=len) && (now+<=n))
{
now++;ret+=l[now];
lb[now]=i;
}
}
}
void dps()
{
for (int i=;i<=n;i++) if (lb[i]==) dp[i][]=;
for (int i=;i<=n;i++) sum[i][]=sum[i-][]+dp[i][];
ans+=dp[n][];
for (int i=;i<=m;i++)
{
for (int j=;j<=n;j++)
{
if (j<=i) {dp[j][i&]=sum[j][i&]=;continue;}
if (lb[j]-) dp[j][i&]=(sum[j-][(i&)^]-sum[lb[j]-][(i&)^]+mod)%mod;
else dp[j][i&]=sum[j-][(i&)^]%mod;
sum[j][i&]=(sum[j-][i&]+dp[j][i&])%mod;
}
ans=(ans+dp[n][i&])%mod;
}
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) {scanf("%d",&l[i]);sums+=l[i];mx=max(mx,l[i]);}
binary_search();
get_bnd();
dps();
printf("%d %d\n",len,ans);
return ;
}

BZOJ 1044 木棍分割的更多相关文章

  1. BZOJ 1044 木棍分割 解题报告(二分+DP)

    来到机房刷了一道水(bian’tai)题.题目思想非常简单易懂(我的做法实际上参考了Evensgn 范学长,在此多谢范学长了) 题目摆上: 1044: [HAOI2008]木棍分割 Time Limi ...

  2. BZOJ 1044 木棍分割(二分答案 + DP优化)

    题目链接  木棍分割 1044: [HAOI2008]木棍分割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3830  Solved: 1453[S ...

  3. 【BZOJ】【1044】【HAOI2008】木棍分割

    二分/DP 真是一道好题! 第一问很简单的二分…… 第二问一开始我想成贪心了,其实应该是DP的= = 然后没有注意……又MLE又TLE的……这题要对DP进行时空两方面的优化!! 题解:(by JoeF ...

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

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

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

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

  6. 1044: [HAOI2008]木棍分割

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

  7. BZOJ 1044

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

  8. BZOJ1044: [HAOI2008]木棍分割

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

  9. bzoj1044[HAOI2008]木棍分割 单调队列优化dp

    1044: [HAOI2008]木棍分割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4314  Solved: 1664[Submit][Stat ...

随机推荐

  1. [转贴]sizeof 和strlen的区别

    1. 编译时计算运算符sizeof,可用类型或变量做参数,计算占用内存的大小.sizeof后若是类型必须加括弧,若是变量名可不加括弧.sizeof(x)可用来定义数组维数.如:printf(" ...

  2. JavaScript String支持的辅助format函数+【分页1】

    /** ) {         && ; i < arguments.length; i++) {                 : int.Parse(Request.Par ...

  3. Chrome浏览器插件VisualEvent,可以方便的查看页面绑定的事件

    http://files.cnblogs.com/files/jiqing9006/VisualEvent.zip

  4. html页面显示div源代码:用<xmp></xmp>标签

    html页面显示div源代码:用<xmp></xmp>标签效果还可以.

  5. 进军es6(2)---解构赋值

    本该两周之前就该总结的,但最近一直在忙校招实习的事,耽误了很久.目前依然在等待阿里HR面后的结果中...但愿好事多磨!在阿里的某轮面试中面试官问到了es6的掌握情况,说明es6真的是大势所趋,我们更需 ...

  6. poj 2079 Triangle(旋转卡壳)

    Triangle Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 8917   Accepted: 2650 Descript ...

  7. 白帽子讲Web安全1.pdf

    第一章 我的安全世界观 安全是一个持续过程 6种威胁:Spoofing(伪装).Tampering(篡改).Repudiation(抵赖).InformationDisclosure(信息泄漏).De ...

  8. Linq左右連接

    1.左连接: var LeftJoin = from emp in ListOfEmployeesjoin dept in ListOfDepartmenton emp.DeptID equals d ...

  9. Web开发,如何从小工到专家

    最近在研读关于“整体性学习”的一些东西,收获颇丰. 整体性学习强调的东西有三样:结构.模型.与高速通道.特别是关于结构的篇章: 理解是什么?理解就是结构高度发达完善的结果. 是不是有些学科你可以轻松“ ...

  10. ab apache Benchmarking中链接的写法 记得加上/

    C:\wamp\bin\apache\Apache2.2.21\bin>ab.exe -n5 -c5 http://www.baidu.com ab.exe: invalid URL Usage ...