【[HAOI2008]木棍分割】
没写过几道的前缀和优化\(dp\)
第一问是小学生难度的二分
第二问就直接\(dp\)了
设\(dp[i][j]\)表示当前分割点在\(i\)之后,前面一共分割了\(j\)段的方案数
利用前缀和单调性,通过二分预处理出每一个点往前能扩展到的最大位置,之后前缀和优化就可以啦
但是发现这个样子空间会炸,而这个样子还没有办法滚动起来
那好办交换一下状态的顺序就可以啦,就可以前缀和/滚动数组优化了
代码
#include<iostream>
#include<cstring>
#include<cstdio>
#define re register
#define maxn 50005
#define max(a,b) ((a)>(b)?(a):(b))
const int mod=10007;
int a[maxn],n,m;
int dp[2][maxn],pre[2][maxn];
int p[maxn],to[maxn];
int ans;
inline int read()
{
char c=getchar();
int x=0;
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-48,c=getchar();
return x;
}
inline int check(int x)
{
int now=0,tot=0;
for(re int i=1;i<=n;i++)
{
if(now+a[i]>x) now=a[i],tot++;
else now+=a[i];
if(tot>m) return 0;
}
return tot<=m;
}
inline int find(int l,int r,int now)
{
int t;
while(l<=r)
{
int mid=l+r>>1;
if(p[now]-p[mid]>ans) l=mid+1;
else r=mid-1,t=mid;
}
return t;
}
int l,r;
int main()
{
n=read(),m=read();
for(re int i=1;i<=n;i++) a[i]=read(),r+=a[i],l=max(l,a[i]);
for(re int i=1;i<=n;i++) p[i]=p[i-1]+a[i];
while(l<=r)
{
int mid=l+r>>1;
if(check(mid)) ans=mid,r=mid-1;
else l=mid+1;
}
printf("%d ",ans);
for(re int i=1;i<=n;i++)
to[i]=find(0,i-1,i)+1;
for(re int i=1;i<=n;i++) if(p[i]<=ans) dp[0][i]=1;
for(re int i=1;i<=n;i++) pre[0][i]=pre[0][i-1]+dp[0][i];
int o=0,cnt=0;
cnt=(cnt+dp[0][n])%mod;
for(re int i=2;i<=m+1;i++,o^=1)
{
memset(dp[o^1],0,sizeof(dp[o^1]));
for(re int j=1;j<=n;j++)
dp[o^1][j]=(dp[o^1][j]+pre[o][j-1]-(j-2<0?0:pre[o][to[j]-2])+mod)%mod;
pre[o^1][0]=0;
for(re int j=1;j<=n;j++)
pre[o^1][j]=(pre[o^1][j-1]+dp[o^1][j])%mod;
cnt=(cnt+dp[o^1][n])%mod;
}
printf("%d\n",cnt);
return 0;
}
【[HAOI2008]木棍分割】的更多相关文章
- BZOJ1044: [HAOI2008]木棍分割
1044: [HAOI2008]木棍分割 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1580 Solved: 567[Submit][Statu ...
- BZOJ 1044: [HAOI2008]木棍分割(二分答案 + dp)
第一问可以二分答案,然后贪心来判断. 第二问dp, dp[i][j] = sigma(dp[k][j - 1]) (1 <= k <i, sum[i] - sum[k] <= ans ...
- bzoj1044[HAOI2008]木棍分割 单调队列优化dp
1044: [HAOI2008]木棍分割 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4314 Solved: 1664[Submit][Stat ...
- 【BZOJ1044】[HAOI2008]木棍分割(动态规划,贪心)
[BZOJ1044][HAOI2008]木棍分割(动态规划,贪心) 题面 BZOJ 洛谷 题解 第一问随便二分一下就好了,贪心\(check\)正确性显然. 第二问随便前缀和+单调队列优化一下\(dp ...
- 【BZOJ1044】[HAOI2008]木棍分割
[BZOJ1044][HAOI2008]木棍分割 题面 bzoj 洛谷 题解 第一问显然可以二分出来的. 第二问: 设\(dp[i][j]\)表示前\(i\)个,切了\(j\)组的方案数 发现每次转移 ...
- 1044: [HAOI2008]木棍分割
1044: [HAOI2008]木棍分割 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2161 Solved: 779[Submit][Statu ...
- BZOJ1044 [HAOI2008]木棍分割 【二分+Dp】
1044: [HAOI2008]木棍分割 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4281 Solved: 1644 [Submit][St ...
- [BZOJ1044][HAOI2008]木棍分割 二分+贪心+dp+前缀和优化
1044: [HAOI2008]木棍分割 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4112 Solved: 1577 [Submit][St ...
- BZOJ_1044_[HAOI2008]木棍分割_二分答案+DP+单调队列
BZOJ_1044_[HAOI2008]木棍分割_二分答案+DP Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个 ...
- HAOI2008 木棍分割 数据结构优化dp+二分答案
很久之前打的题,现在补篇博客 打滚动数组 #E. 木棍分割 Accepted 100 1712 ms 1512 KiB 2019-05-07 17:01:23 Short 不打滚动数组 #419. ...
随机推荐
- TT 安装 之 LINUX
# useradd ttadmin -- 创建用户 # groupadd ttadmin -- 创建用户组 # mkdir /etc/TimesTen -- 创建目录 # chgrp -R ttadm ...
- Docker学习笔记--Docker 启动nginx实例挂载目录权限不够(转)
今天在启动一个docker 运行nginx实例,在挂载目录时,出现访问静态目录时,权限不够 执行的命令是: docker run --name my-nginx -d -p 80:80 --resta ...
- mysql 语句执行的过程
客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的执行计划: mysql根据优化器 ...
- 内行看门道:看似“佛系”的《QQ炫舞手游》,背后的音频技术一点都不简单
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云发表于云+社区专栏 3月14日,腾讯旗下知名手游<QQ炫舞>正式上线各大应用商店,并迅速登上App Store免 ...
- BNU34058——干了这桶冰红茶!——————【递推】
干了这桶冰红茶! Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class nam ...
- java XML解析成Map
1.需要解析的文件.xml <?xml version="1.0" encoding="UTF-8"?> <request> <r ...
- [转]NLog学习笔记二:深入学习
本文转自:http://www.cnblogs.com/CCHUncle/p/5207735.html 配置文件 NLog所有的配置信息都可以写到一个单独的xml文件中,也可以在程序代码中进行配置. ...
- JavaScript数组常用操作总结
我们在日常开发过程中,使用到原生 JavaScript的时候,有时候会频繁的对数组进行操作,今天我把工作以来,经常用到的有关 JavaScript数组的方法总结一下,方便日后工作的时候查找使用! 一. ...
- pod install 出错
今天使用cocoapods的时候在执行pod install出错,如下: 使用很多方法都不行,但是问题感觉应该是需要升级,所有就找到升级cocoapods:sudo gem install -n /u ...
- 从零开始的全栈工程师——html篇1.3
文本.字体css样式与前期英语单词汇总 一.文本样式(text) 1.颜色:color:red; 2.文本对齐方式:text-align:left/center/right/justify; left ...