二分+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. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-003-@Conditional根据条件生成bean及处理profile

    一.用@Conditional根据条件决定是否要注入bean 1. package com.habuma.restfun; public class MagicBean { } 2. package ...

  2. TF卡的Class4/Class6/Class10

    TF卡全称TransFlash卡,即T-Flash又称MicroSD,随设备微型化的需要,TF卡用途越来越广,速度也越来越快,从最初的Class2早已发展到目前主流的Class10,TF卡体积为15m ...

  3. CRC算法及C实现

    一.CRC算法原理   CRC校验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校 验用的监督码(既CRC码)r位,并附在信息后边,构成一个新的二进制码序列数 ...

  4. 三年所有JAVA技术文档列表

    学习工作流workflow管理基础概念.pdf 深入浅出Struts2(PDF).zip 深入浅出Hibernate.pdf 敏捷软件开发:原则.模式与实践.rar 精通Oracle.10g.Pl.S ...

  5. index 辨别字符在字符串中的位置

    namespace index{    class Program    {        static void Main(string[] args)        {            wh ...

  6. efront二次开发记要

    efront系统是一套开源的在线学习系统,是用PHP编写的,内含“考试”功能.该系统的开源的是社区版,虽然看上去功能强大,但使用起来却很不符合国情.为了让公司使用,先做了一次最简化的二次开发,由于是最 ...

  7. WordPress Comment Attachment插件跨站脚本漏洞

    漏洞名称: WordPress Comment Attachment插件跨站脚本漏洞 CNNVD编号: CNNVD-201310-062 发布时间: 2013-10-09 更新时间: 2013-10- ...

  8. LR测试工具性能指标详解

    这篇文章将对LoadRunner测试工具的性能指标从以下三点进行详解. 第一点.Web资源分析是从服务器入手对Web服务器的性能分析. 1.Hits per Second "每秒点击次数&q ...

  9. 页面与母版页面的asp:ContentPlaceHolder不匹配

    问题描述:The page has one or more <asp:Content> controls that do not correspond with <asp:Conte ...

  10. 《C语言程序设计现代方法》第2章 C语言基本概念

    C语言的基本概念 第一个C程序例子. /* pun.c */ #include <stdio.h> int main(void) { printf("To C, or not t ...