传送门

首先可以注意到序列里面元素的顺序对答案是没有影响的,所以二话不说先排序再看看怎么搞

考虑枚举每种子序列可能产生的贡献并算一下产生这个贡献的子序列有多少

考虑设 $F(x)$ 表示选择的元素差值至少为 $x$ 的长度为 $k$ 的子序列的方案数

那么最终如果直接把每个 $F(x),x \in [1,max(a)]$ 加起来会发现,对于任意一种差值为 $t$ 的方案,它都被所有 $x<=t$ 的 $F(x)$ 各计算到了一次,那么总贡献即为 $t$,所以只要求出 $F$ 然后加起来就是我们要的答案

先不考虑复杂度,那么这个显然是可以 $dp$ 的,设 $f[i][j]$ 表示长度为 $i$ ,考虑了前 $j$ 个位置,第 $j$ 个位置强制选择时的子序列方案数

那么有转移 $f[i][j]+=f[i-1][k]$ 其中 $k<j$ 并且 $a_j-a_k>=x$ (注意这时 $a$ 已经按从小到大排序了)

注意到随着 $j$ 的增加,合法的 $k$ 一定是越来越大的并且是一段前缀区间,那么转移显然可以维护一个指针和一个前缀和加速到 $O(1)$

现在单次 $dp$ 的复杂度就是优秀的 $nk$ 了,那么再考虑一下枚举 $x$ 的复杂度,很好,复杂度达到了优秀的 $max(a)nk$

然后注意到一个看似微不足道的优化:枚举 $x$ 的时候如果 $x>max(a)/k+1$ ,那么一定不存在合法的长度为 $k$ 的序列了(显然吧)

发现复杂度就变成了 $\frac {max(a)} {k+1}nk$ 即 $max(a)n$ ...

然后就过了......

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=,mo=;
inline int fk(int x) { return x>=mo ? x-mo : x; }
int n,m,A[N];
int f[N][N],ans;
int main()
{
n=read(),m=read();
for(int i=;i<=n;i++) A[i]=read();
sort(A+,A+n+); int mx=A[n];
for(int I=;I<=mx/(m-);I++)
{
for(int i=;i<=n;i++) f[][i]=;
for(int i=;i<=m;i++)
{
int sum=,p=;
for(int j=;j<=n;j++)
{
while(A[p]+I<=A[j])
sum=fk(sum+f[i-][p++]);
f[i][j]=sum;
}
}
for(int i=;i<=n;i++) ans=fk(ans+f[m][i]);
}
printf("%d\n",ans);
return ;
}

最新文章

  1. vm网络设置
  2. 里面的div怎么撑开外面的div,让高度自适应
  3. iOS----Xcode6或者Xcode7设置LaunchImage图标
  4. Thread 与 Runnable
  5. Oracle数据库备份与恢复
  6. jQueryMobile控件之ListView
  7. wireshark如何抓取别人电脑的数据包
  8. 【hadoop代码笔记】Mapreduce shuffle过程之Map输出过程
  9. INV Close Period &amp; GL Import Journal &gt; DML tables
  10. C#编译器对于dynamic对象到底做了什么
  11. SPOJ 375 (树链剖分+线段树)
  12. SVN强制注释
  13. SVN解锁失败的解决办法
  14. w3school之CSS学习笔记
  15. tf.variable和tf.get_Variable以及tf.name_scope和tf.variable_scope的区别
  16. 关于ajax 进行post提交 json数据到controller
  17. linux远程目录共享
  18. APB协议
  19. py3+urllib+bs4+反爬,20+行代码教你爬取豆瓣妹子图
  20. 使用generator生成dao、mapping和model

热门文章

  1. gitlab配置邮箱postfix(新用户激活邮件)
  2. 以太坊 Geth 环境搭建(Ubuntu)
  3. win2008 r2下配置IIS7(ASP.net运行环境)
  4. Oracle11g安装与卸载教程
  5. laravel5.1设置cookie
  6. PHP实现发送模板消息(微信公众号版)
  7. uWSGI 漏洞复现(CVE-2018-7490)
  8. Linux基础(特基本的那种)知识
  9. 亿级mongodb数据迁移
  10. python 3 获取本机公网ip的几种方法