BZOJ_1044_[HAOI2008]木棍分割_二分答案+DP

Description

  有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连
接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长度最小, 并且输出有多少种砍的方法使得总长
度最大的一段长度最小. 并将结果mod 10007。。。

Input

  输入文件第一行有2个数n,m.接下来n行每行一个正整数Li,表示第i根木棍的长度.n<=50000,0<=m<=min(n-1,10
00),1<=Li<=1000.

Output

  输出有2个数, 第一个数是总长度最大的一段的长度最小值, 第二个数是有多少种砍的方法使得满足条件.

Sample Input

3 2
1
1
10

Sample Output

10 2

HINT

两种砍的方法: (1)(1)(10)和(1 1)(10)


第一问直接二分答案。

然后用这个答案来做第二问。

f[i][k]+=f[j][k],(si-sj<=L)

然后发现j单调不降,直接单调队列。

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
#define N 50050
const int mod=10007;
int a[N],n,m,s[N],f[2][N];
bool check(int mid) {
int i,sum=0,re=0;
for(i=1;i<=n;i++) {
if(a[i]>mid) return 0;
if(sum+a[i]>mid) {
sum=0; re++;
}
sum+=a[i];
}
return re<=m;
}
int main() {
scanf("%d%d",&n,&m);
int i,j,k;
int l=0,r=0;
for(i=1;i<=n;i++) {
scanf("%d",&a[i]);
r+=a[i]; s[i]=s[i-1]+a[i];
}
r++;
while(l<r) {
int mid=(l+r)>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
printf("%d ",l);
for(i=1;i<=n;i++) if(s[i]<=l) f[0][i]=1;
int ans=0;
for(i=1;i<=m;i++) {
int sum=0;
k=1;
for(j=1;j<=n;j++) {
while(s[j]-s[k]>l) sum=(sum-f[i-1&1][k]+mod)%mod,k++;
f[i&1][j]=sum;
sum=(sum+f[i-1&1][j])%mod;
}
ans=(ans+f[i&1][n])%mod;
}
printf("%d\n",ans);
}

最新文章

  1. Android中通过ActionBar为标题栏添加搜索以及分享视窗
  2. 解析大型.NET ERP系统 灵活复杂的界面控件Infragistics WinForms
  3. mysql5.x升级到mysql5.7后导入之前数据库date出错的快速解决方法【mysql低版本数据导入到高版本出错的解决方法】
  4. 让ecshop模板支持php运算
  5. IIS ARR 负载均衡
  6. Asp.Net中应用Aspose.Cells输出报表到Excel 及样式设置
  7. 10、技术经理要阅读的书籍 - IT软件人员书籍系列文章
  8. unity 环境增强
  9. centos安装中文支持(转)
  10. (简单) LightOJ 1074 Extended Traffic,SPFA+负环。
  11. PL/SQL客户端连接虚拟机(linux)下的oracle服务器配置
  12. 破解附近寝室的Wifi密码
  13. .NET Core 实践二:事件通知和异步处理
  14. Django之setting文件
  15. pandas 存取数据小笔记
  16. 凉凉了,Eureka 宣布闭源,Spring Cloud 何去何从?
  17. js,H5本地存储
  18. Python套接字编程(1)——socket模块与套接字编程
  19. OSS介绍
  20. IAR for stm8 memory窗口的功能

热门文章

  1. win7 32位安装pyqt
  2. windows10系统下安装nginx的安装步骤
  3. sublime快捷键设置
  4. Linux文件内容查阅
  5. css控制打印时只显示指定区域
  6. Python实战之自己主动化评论
  7. js实现网页端复制功能
  8. 项目部署到niginx title乱码问题
  9. Oracle操作笔记
  10. mount available