[BZOJ1563][NOI2009]诗人小G(决策单调性优化DP)
2018-10-22 23:49
465 查看
模板题。
每个决策点都有一个作用区间,后来的决策点可能会比先前的优。于是对于每个决策点二分到它会比谁在什么时候更优,得到新的决策点集合与区间。
#include<cstdio> #include<algorithm> #include<cstring> #define rep(i,l,r) for (int i=(l); i<=(r); i++) typedef long double ll; using namespace std; const int N=100010; const ll MAX=1e18; int T,n,l,p,top; ll sm ,f ; char ch [35]; struct P{ int l,r,p; }q ; ll ksm(ll x){ if (x<0) x=-x; ll res=1; rep(i,1,p) res*=x; return res; } ll cal(int j,int i){ return f[j]+ksm(sm[i]-sm[j]+(i-j-1)-l); } int find(P a,int b){ int l=a.l,r=a.r; while (l<=r){ int mid=(l+r)>>1; if (cal(a.p,mid)<cal(b,mid)) l=mid+1; else r=mid-1; } return l; } void DP(){ int st=1,ed=1; q[1]=(P){0,n,0}; rep(i,1,n){ if (st<=ed && i>q[st].r) st++; f[i]=cal(q[st].p,i); if (st>ed || cal(i,n)<=cal(q[ed].p,n)){ while (st<=ed && cal(i,q[ed].l)<=cal(q[ed].p,q[ed].l)) ed--; if (st>ed) q[++ed]=(P){i,n,i}; else{ int t=find(q[ed],i); q[ed].r=t-1; q[++ed]=(P){t,n,i}; } } } } int main(){ freopen("bzoj1563.in","r",stdin); freopen("bzoj1563.out","w",stdout); for (scanf("%d",&T); T--; ){ scanf("%d%d%d",&n,&l,&p); rep(i,1,n) scanf("%s",ch[i]); rep(i,1,n) sm[i]=sm[i-1]+strlen(ch[i]); DP(); if (f >MAX) printf("Too hard to arrange\n"); else printf("%lld\n",(long long)(f )); puts("--------------------"); } return 0; }
相关文章推荐
- [bzoj1563][NOI2009]诗人小G(决策单调性优化)
- bzoj1563: [NOI2009]诗人小G【决策单调性优化dp】
- 【BZOJ1563】【NOI2009】诗人小G(dp+决策单调性)
- [BZOJ1563][NOI2009]诗人小G(dp+决策单调性)
- BZOJ 1563: [NOI2009]诗人小G 决策单调性DP
- BZOJ_1563_[NOI2009]诗人小G_决策单调性
- [NOI2009]诗人小G(决策单调性优化dp)
- bzoj 1563 [NOI2009]诗人小G 四边形不等式 决策单调dp
- bzoj4709 -- 决策单调性优化DP
- [BZOJ 1563][NOI 2009]诗人小G(四边形优化DP)
- Bzoj:[Poi2011]Lightning Conductor:决策单调性优化DP详解
- 【BZOJ 1563】 (四边形优化、决策单调性)
- [BZOJ1010][HNOI2008]玩具装箱(决策单调性/斜率优化DP)
- 决策单调性Ⅰ:四边形不等式(bzoj 1563: [NOI2009]诗人小G)
- bzoj2369 && 2687 -- 决策单调性优化DP
- ★【动态规划】【决策单调性优化】【NOI2009】诗人小G
- BZOJ.1010.[HNOI2008]玩具装箱toy(DP 斜率优化/单调队列 决策单调性)
- [BZOJ 2216][Poi2011]Lightning Conductor:DP决策单调性
- 【BZOJ1563】【NOI2009】诗人小G
- 【BZOJ 1563】 [NOI2009]诗人小G