bzoj1044
好题
第一问不难,毕竟二分答案类的题目在USACO上都练了好多遍了
第二问充分的暴露了我dp渣的本性
一开始楞是没想出来
f[i,j]表示到第i根木棒切了j刀满足最长段小于等于ans的方案数
式子是这样的f[i,j]=sigma(f[k,j-1]) if sum[i]-sum[k]<=ans
然后发现我的优化水平还是不错的,
首先是空间上的问题,观察得知,切这刀的方案数只与切前一刀有关,于是我们滚动数组
再看时间,观察k的选取,与这是第几刀无关
再看,如果满足sum[i]-sum[k]<=ans 那么k~i-1一定都是符合的切法
于是我们预先处理一下即可
复杂度为O(nlogn+mn)
const mo=;
var f:array[..,..] of longint;
sum,s,a,b:array[..] of longint;
p,l,r,mid,n,m,i,j,t,ans:longint; function check(s:longint):boolean;
var t,len,i:longint;
begin
t:=;
len:=;
p:=;
for i:= to n do
if len+a[i]>s then
begin
inc(t);
if t>m then exit(false);
if len>p then p:=len;
len:=a[i];
end
else len:=len+a[i];
if len>p then p:=len;
exit(true);
end;
begin
readln(n,m);
for i:= to n do
begin
readln(a[i]);
sum[i]:=sum[i-]+a[i];
if l<a[i] then l:=a[i];
end;
r:=sum[i];
while l<=r do //二分答案
begin
mid:=(l+r) shr ;
if check(mid) then
begin
ans:=p;
r:=p-;
end
else l:=mid+;
end;
for i:= to n do
if sum[i]<=ans then f[,i]:= else break;
j:=;
for i:= to n do //预处理
begin
while sum[i]-sum[j]>ans do inc(j);
b[i]:=j;
end;
p:=;
t:=f[p,n];
for i:= to m do
begin
p:=-p;
fillchar(s,sizeof(s),);
for j:= to n do
begin
if b[j]-> then r:=b[j]- else r:=; //小细节
f[p,j]:=(s[j-]-s[r]+mo) mod mo;
s[j]:=(s[j-]+f[-p,j]) mod mo;
end;
t:=(t+f[p,n]) mod mo;
end;
writeln(ans,' ',t);
end.
bzoj1044的更多相关文章
- 【czy系列赛】czy的后宫6 && bzoj1044 [HAOI2008]木棍分割
题目描述 众所周知的是丧尸czy有很多妹子(虽然很多但是质量不容乐观QAQ),今天czy把n个妹子排成一行来检阅.但是czy的妹子的质量实在--所以czy看不下去了.检阅了第i个妹子会增加czy a[ ...
- 【BZOJ1044】[HAOI2008]木棍分割(动态规划,贪心)
[BZOJ1044][HAOI2008]木棍分割(动态规划,贪心) 题面 BZOJ 洛谷 题解 第一问随便二分一下就好了,贪心\(check\)正确性显然. 第二问随便前缀和+单调队列优化一下\(dp ...
- 【BZOJ1044】[HAOI2008]木棍分割
[BZOJ1044][HAOI2008]木棍分割 题面 bzoj 洛谷 题解 第一问显然可以二分出来的. 第二问: 设\(dp[i][j]\)表示前\(i\)个,切了\(j\)组的方案数 发现每次转移 ...
- [bzoj1044][HAOI2008][木棍分割] (二分+贪心+dp+队列优化)
Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长 ...
- BZOJ1044: [HAOI2008]木棍分割
1044: [HAOI2008]木棍分割 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1580 Solved: 567[Submit][Statu ...
- bzoj1044[HAOI2008]木棍分割 单调队列优化dp
1044: [HAOI2008]木棍分割 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4314 Solved: 1664[Submit][Stat ...
- 【bzoj1044】木棍分割
Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长 ...
- [BZOJ1044][HAOI2008]木棍分割 二分 + 单调队列优化dp + 滚动数组优化dp
Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长 ...
- bzoj1044: [HAOI2008]木棍分割 二分+dp
有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长度最小, 并且输出有多少 ...
随机推荐
- [ Windows] [ OS ] [ Remote Desktop ] 開啟同一個帳號同時2的連線RDP的方式
感謝同事 Allen 的Support :) 執行>gpedit.msc 電腦設定>Windows元件>遠端桌面服務>遠端桌面工作階段主機>連線>限制遠端桌面服務的 ...
- 数据可视化(三)- Seaborn简易入门
本文内容来源:https://www.dataquest.io/mission/133/creating-compelling-visualizations 本文数据来源:http://www.cdc ...
- [python] 字符串引用
%s str %d 整数 %f 浮点数 print('$%.03f' % 30.1777) >>>$30.178 #四舍五入 print( '%-5s %s %10s' % ('J ...
- CentOS 下 Codeblocks 的 安装 + 汉化 以及 基本使用介绍
Codeblocks 安装 注:在root用户下运行下列命令 1.安装gcc,需要c和c++两部分,默认安装下,CentOS不安装编译器的,在终端输入以下命令即可 yum install gcc yu ...
- JavaScript 权威指南第6版 - [阅读笔记]
JavaScript 基础 Page 13 (1)<script> 的属性:async,charset,defer='defer',language已废,src,type (2)n ...
- 在Linux中,如何取出一个字符串的前5位
问: 在Linux中,如何取出一个字符串的前5位? 常用的一些方法如下: [tough@toughhou ~]$ str=abcdef [tough@toughhou ~]$ echo $str ab ...
- "!x++" 我之见解
"!x++"之说,各人见解不同,但真理只有一个.我只尝试着说出一种见解,未知真相. 何如? "!x++"等价于"!(x++)". 理论分析 ...
- dtGrid插件集成到Angular环境实现表格化数据展现
00没有抱怨的世界 周末效率好低,两天没更了,看看这看看那,装了个win10发现触摸板驱动不适配,然后找了好久都不行,23333. AngularJS用的时间很短,高级的用法有点吃不消了,$diges ...
- Microsoft .NET Framework 4.0安装时发生严重错误 无法安装
前几天安装Axure,电脑提示没有安装.NET Framework4.0,然后下载安装,又提示如下图所示情况: 在网上找了好多方法,大多都是打开cmd,输入net stop WuAuServ,修改注册 ...
- hdu 4101
比赛的时候先是受以前一个圣神海的题目 用了两遍DFS 第一遍标记出围墙 第二遍求围墙外和每块围墙降为1所需的攻击次数 结果爆栈 改为BFS后AC DFS的加了一句这个 #pragma comme ...