题意:给定N,L,P,求f[N]

sum[i]递增,L<=3e6,P<=10

思路:四边形不等式的证明见https://www.byvoid.com/zhs/blog/noi-2009-poet

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef unsigned int uint;
  5. typedef unsigned long long ull;
  6. typedef long double ld;
  7. typedef pair<int,int> PII;
  8. typedef pair<ll,ll> Pll;
  9. typedef vector<int> VI;
  10. typedef vector<PII> VII;
  11. //typedef pair<ll,ll>P;
  12. #define N 300010
  13. #define M 200010
  14. #define INF 1e18
  15. #define fi first
  16. #define se second
  17. #define MP make_pair
  18. #define pb push_back
  19. #define pi acos(-1)
  20. #define mem(a,b) memset(a,b,sizeof(a))
  21. #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
  22. #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
  23. #define lowbit(x) x&(-x)
  24. #define Rand (rand()*(1<<16)+rand())
  25. #define id(x) ((x)<=B?(x):m-n/(x)+1)
  26. #define ls p<<1
  27. #define rs p<<1|1
  28.  
  29. const //ll MOD=1e9+7,inv2=(MOD+1)/2;
  30. double eps=1e-;
  31. //int INF=1e9;
  32. int dx[]={-,,,};
  33. int dy[]={,,-,};
  34.  
  35. struct node
  36. {
  37. int l,r,id;
  38. }q[N];
  39.  
  40. int n,L,P;
  41. ld dp[N],s[N];
  42. char ch[];
  43.  
  44. int read()
  45. {
  46. int v=,f=;
  47. char c=getchar();
  48. while(c<||<c) {if(c=='-') f=-; c=getchar();}
  49. while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
  50. return v*f;
  51. }
  52.  
  53. ld pw(ld x)
  54. {
  55. if(x<) x=-x;
  56. ld ans=;
  57. rep(i,,P) ans*=x;
  58. return ans;
  59. }
  60.  
  61. ld calc(int j,int i)
  62. {
  63. return dp[j]+pw(s[i]-s[j]-L+i-j-);
  64. }
  65.  
  66. void solve()
  67. {
  68. n=read(),L=read(),P=read();
  69. s[]=;
  70. rep(i,,n)
  71. {
  72. scanf("%s",ch+);
  73. int x=strlen(ch+);
  74. s[i]=s[i-]+x;
  75. }
  76. int h=,t=,l,r,last;
  77. q[]={,n,};
  78. rep(i,,n)
  79. {
  80. while(i>q[h].r) h++;
  81. dp[i]=calc(q[h].id,i);
  82. if(calc(i,n)>calc(q[t].id,n)) continue;
  83. while(i<q[t].l&&calc(i,q[t].l)<calc(q[t].id,q[t].l)) t--;
  84. l=max(q[t].l,i+);
  85. r=q[t].r;
  86. last=min(n,q[t].r+);
  87. while(l<=r)
  88. {
  89. int mid=(l+r)>>;
  90. if(calc(i,mid)<calc(q[t].id,mid)){last=mid; r=mid-;}
  91. else l=mid+;
  92. }
  93. q[t].r=last-;
  94. q[++t]={last,n,i};
  95. }
  96. if(dp[n]>INF) printf("Too hard to arrange\n");
  97. else printf("%lld\n",(ll)dp[n]);
  98. printf("--------------------\n");
  99. }
  100.  
  101. int main()
  102. {
  103. int cas=read();
  104. while(cas--) solve();
  105. return ;
  106. }

【BZOJ1563】诗人小G(决策单调性DP)的更多相关文章

  1. BZOJ1563:[NOI2009]诗人小G(决策单调性DP)

    Description Input Output 对于每组数据,若最小的不协调度不超过1018,则第一行一个数表示不协调度若最小的不协调度超过1018,则输出"Too hard to arr ...

  2. [BZOJ 1563] [NOI 2009] 诗人小G(决策单调性)

    [BZOJ 1563] [NOI 2009] 诗人小G(决策单调性) 题面 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以放的句子数目是没有限制的.小 G ...

  3. bzoj1563: [NOI2009]诗人小G 决策单调性(1D1D)

    目录 题目链接 题解 代码 题目链接 bzoj1563: [NOI2009]诗人小G 题解 \(n^2\) 的dp长这样 \(f_i = min(f_j + (sum_i - sum_j - 1 - ...

  4. BZOJ1563: [NOI2009]诗人小G(决策单调性 前缀和 dp)

    题意 题目链接 Sol 很显然的一个dp方程 \(f_i = min(f_j + (sum_i - sum_j - 1 - L)^P)\) 其中\(sum_i = \sum_{j = 1}^i len ...

  5. [NOI2009]诗人小G 决策单调性优化DP

    第一次写这种二分来优化决策单调性的问题.... 调了好久,,,各种细节问题 显然有DP方程: $f[i]=min(f[j] + qpow(abs(sum[i] - sum[j] - L - 1))); ...

  6. P1912 [NOI2009]诗人小G[决策单调性优化]

    地址 n个数划分若干段,给定$L$,$p$,每段代价为$|sum_i-sum_j-1-L|^p$,求总代价最小. 正常的dp决策单调性优化题目.不知道为什么luogu给了个黑题难度.$f[i]$表示最 ...

  7. [BZOJ1563][NOI2009]诗人小G(决策单调性优化DP)

    模板题. 每个决策点都有一个作用区间,后来的决策点可能会比先前的优.于是对于每个决策点二分到它会比谁在什么时候更优,得到新的决策点集合与区间. #include<cstdio> #incl ...

  8. BZOJ_1563_[NOI2009]诗人小G_决策单调性

    BZOJ_1563_[NOI2009]诗人小G_决策单调性 Description Input Output 对于每组数据,若最小的不协调度不超过1018,则第一行一个数表示不协调度若最小的不协调度超 ...

  9. [bzoj1563][诗人小g]

    bzoj1563 思路 首先考虑\(n^2\)的暴力dp,用sum[i]表示前i句话的长度总和.f[i]表示前i句话最小的不协调度之和.转移的时候考虑枚举前面的每个点,找到转移的最优秀的那个点. 然后 ...

  10. [NOI2009]诗人小G 四边形优化DP

    题目传送门 f[i] = min(f[j] + val(i,j); 其中val(i,j) 满足 四边形dp策略. 代码: #include<bits/stdc++.h> using nam ...

随机推荐

  1. Neither abstinence nor excess ever renders man happy

    inch.n. 英寸 courageous.adj.勇敢的 porcelain.n.瓷器 adj.脆的 inventor. n. 发明者 trivial.adj. 不重要的 grove.n.小树林,果 ...

  2. 2.nginx配置详细说明

    Nginx配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行 ...

  3. Chapter02 第四节 函数

    2.4 函数 2.4.1 有返回值的函数 函数定义.函数原型.函数调用 函数定义即定义一个函数:形如 :double sqrt(double x){····} 函数调用即调用这个函数,形如 :doub ...

  4. 【Linux开发】V4L2驱动框架分析学习

    Author:CJOK Contact:cjok.liao#gmail.com SinaWeibo:@廖野cjok 1.概述 Video4Linux2是Linux内核中关于视频设备的内核驱动框架,为上 ...

  5. C语言第八周编程作业

        这个作业属于哪个课程 C语言程序设计 这个作业要求在哪 https://edu.cnblogs.com/campus/zswxy/computer-scienceclass3-2018/hom ...

  6. Springboot2.x集成单节点Redis

    Springboot2.x集成单节点Redis 说明 在Springboot 1.x版本中,默认使用Jedis客户端来操作Redis,而在Springboot 2.x 版本中,默认使用Lettuce客 ...

  7. 前端导出excel文件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. qt 部分控件 setStyleSheet 使用总结

    刚用Qt不久,但是已经感受到Qt ui设计的便捷. 总结一下最近使用的控件,把它们setStyleSheet的使用方法记录下来. 主要使用到的工具有:QToolBar,QToolBox,QPushBu ...

  9. Diango路由映射FBV和CBV

    django中请求处理方式有2种:FBV(function base views) 和 CBV(class base views),换言之就是一种用函数处理请求,一种用类处理请求. FBV # url ...

  10. vscode配置golang

    https://www.cnblogs.com/Leo_wl/p/8242628.html https://www.cnblogs.com/angelyan/p/10400789.html 主要看了这 ...