BZOJ1044/HAOI2008木棍分割
2016-03-04 22:33
309 查看
思路:
二分判断没什么好说的
后面那个dp不难想 主要是要用单调队列优化一下而已 说来惭愧竟然没想到这一层。。。
二分判断没什么好说的
后面那个dp不难想 主要是要用单调队列优化一下而已 说来惭愧竟然没想到这一层。。。
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<cstring> #include<string> using namespace std; const int imax=50000+229; const int mmax=1000+229; const int mod=10007; int n,m; int a[imax],sum[imax]; void iread() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i]; } bool pd(int delta) { int last=0; int need=0; if(a[1]>delta) return false; for(int i=2;i<=n;i++) { if(a[i]>delta) return false; if(sum[i]-sum[last]>delta) { last=i-1; need++;} } if(need>m) return false; return true; } int f[2][imax],q[imax]; int get_ans(int delta) { int ans=0; int pre,now,head,tail; f[0][0]=1; for(int i=1;i<=m;i++) { int now=i&1; int pre=now^1; memset(f[now],0,sizeof(f[now])); head=tail=1; q[head]=0; int tot=f[pre][0]; for(int j=1;j<=n;j++) { while(head<=tail && sum[j]-sum[q[head]]>delta) { tot=(tot-f[pre][q[head]]+mod)%mod; head++; } q[++tail]=j; f[now][q[tail]]=tot; tot=(tot+f[pre][q[tail]])%mod; } for(int j=n-1;j>=1;j--) { if(sum -sum[j]<=delta) ans=(ans+f[now][j])%mod; else break; } } return ans; } void iwork() { int l=1; int r=1000*imax; while(l<=r) { if(l+1==r || l==r) { if(!pd(l)) l=r; break; } int Mid=(l+r)>>1; if(pd(Mid)) r=Mid; else l=Mid+1; } int ans=get_ans(l); printf("%d %d\n",l,ans); } int main() { iread(); iwork(); return 0; }
相关文章推荐
- 基于Android中dp和px之间进行转换的实现代码
- Android中dip、dp、sp、pt和px的区别详解
- LFC1.0.0 版本发布
- Android px、dp、sp之间相互转换
- HP data protector软件学习1--基本角色与基本工作流程
- HP data protector软件学习2--软件组成与界面介绍
- 快速排序里的学问:从猜数字开始
- android中像素单位dp、px、pt、sp的比较
- Android对px和dip进行尺寸转换的方法
- Android根据分辨率进行单位转换-(dp,sp转像素px)
- android 尺寸 dp,sp,px,dip,pt详解
- DP问题各种模型的状态转移方程
- POJ-1695-Magazine Delivery-dp
- nyoj-1216-整理图书-dp
- TYVJ1193 括号序列解题报告
- 对DP的一点感想
- TYVJ上一些DP的解题报告
- soj1005. Roll Playing Games
- HDU 4898 The Revenge of the Princess’ Knight ( 2014 Multi-University Training Contest 4 )
- 01背包问题