日常降智。

不过还是第一次和 2700 的题正解这么近呢……


由于排序后不影响答案,而且直觉告诉我们排序后会更好做,不妨排个序。

直觉告诉我们,变成求最小差 \(\ge v\) 的方案数会比最小差 \(=v\) 的方案数好算。

问题就变成如何求最小差 \(\ge v\) 的方案数。

令 \(f_{i,j}\) 表示前 \(i\) 个数中选了 \(j\) 个,且 \(i\) 被选了的方案数。有 \(f_{i,1}=1\)。

转移:\(f_{i,j}=\sum\limits_{a_i-a_k\ge v}f_{k,j-1}\)。

很明显可以前缀和+双指针优化。

时间复杂度 \(O(nka_\max)\)。然后我就自闭了。

%了一发 wqy 的题解,太神了吧……

其实是最小差的最大值达不到 \(a_\max-a_\min\),而只有 \(\frac{a_\max-a_\min}{k-1}\)。(抽屉原理)

复杂度立刻降到 \(O(nk\frac{a_\max}{k-1})=O(na_\max)\)。

看来……会很多的 DP 套路优化,发掘不了性质,还是只能被吊打……

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int maxn=1111,mod=998244353;
#define MP make_pair
#define PB push_back
#define lson o<<1,l,mid
#define rson o<<1|1,mid+1,r
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
inline ll read(){
char ch=getchar();ll x=0,f=0;
while(ch<'0' || ch>'9') f|=ch=='-',ch=getchar();
while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
return f?-x:x;
}
int n,k,a[maxn],f[maxn][maxn],s[maxn][maxn],ans;
int main(){
n=read();k=read();
FOR(i,1,n) a[i]=read();
sort(a+1,a+n+1);
FOR(x,1,(a[n]-a[1])/(k-1)){
FOR(i,0,n) FOR(j,0,k) f[i][j]=s[i][j]=0;
FOR(i,1,n) f[i][1]=1,s[i][1]=i;
FOR(j,2,k){
int cur=0;
FOR(i,1,n){
while(cur<i && a[i]-a[cur]>=x) cur++;
if(cur && a[i]-a[cur]<x) cur--;
f[i][j]=s[cur][j-1];
s[i][j]=(s[i-1][j]+f[i][j])%mod;
}
}
ans=(ans+s[n][k])%mod;
}
printf("%d\n",ans);
}

CF1188C Array Beauty(DP)的更多相关文章

  1. Leetcode之动态规划(DP)专题-474. 一和零(Ones and Zeroes)

    Leetcode之动态规划(DP)专题-474. 一和零(Ones and Zeroes) 在计算机界中,我们总是追求用有限的资源获取最大的收益. 现在,假设你分别支配着 m 个 0 和 n 个 1. ...

  2. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  3. lightOJ 1047 Neighbor House (DP)

    lightOJ 1047   Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...

  4. UVA11125 - Arrange Some Marbles(dp)

    UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...

  5. 【POJ 3071】 Football(DP)

    [POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted ...

  6. 初探动态规划(DP)

    学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...

  7. Tour(dp)

    Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...

  8. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)

    .navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...

  9. Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)

    Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...

随机推荐

  1. pywinauto教程2

    一.环境安装 1.命令行安装方法 pip install pywinauto==0.6.7 2.手动安装方法 安装包下载链接:pyWin32: python调用windows api的库https:/ ...

  2. 使用OpenCL提升OpenCV图像处理性能 | speed up opencv image processing with OpenCL

    本文首发于个人博客https://kezunlin.me/post/59afd8b3/,欢迎阅读最新内容! speed up opencv image processing with OpenCL G ...

  3. Kafka关键参数设置

    生产环境中使用Kafka,参数调优非常重要,而Kafka参数众多,我们的java的Configuration代码中,经常设置的参数如下: Properties props = new Properti ...

  4. idea中的后缀补全

    IDEA有个很牛逼的功能,那就是后缀补全(Postfix Completion),这个功能可以通过后缀来使用代码补全进行模板式地补全语句,如遍历循环语句(for.foreach).使用 String. ...

  5. VS 插件 ReSharper 的个人习惯

    个人习惯 1. 按 F12 恢复转到定义 很多时候,我个人不太喜欢一按 F12 就跳转到 ReSharper 自带的 查看代码浏览器,我还是喜欢 VS 默认的,于是点击菜单栏的 "RESHA ...

  6. Entity Framework 6 中如何获取 EntityTypeConfiguration 的 Edm 信息?(五)

    直接贴代码了: NewsInfo 实体类: public class NewsInfo { public int NewsInfoId { get; set; } public string News ...

  7. 使用NumPy、Numba的简单使用(二)

    本来要写NLP第三课动态规划的,日了,写到一半发现自己也不会了,理论很简单,动态规划咋回事也知道,但是实现在源码上还是有点难度,现在简单给予题目描述,小伙伴也可以来思考一下,例题一,我们现在有1元硬币 ...

  8. 用openresty(Lua)写一个获取YouTube直播状态的接口

    文章原发布于:https://www.chenxublog.com/2019/08/29/openresty-get-youtube-live-api.html 之前在QQ机器人上面加了个虚拟主播开播 ...

  9. JS运算符类型

    一.运算符类型 1.算术运算符: 用于各类数值运算,包括加(+).减(-).乘(*).除(/).求余(或称模运算,%).自增(++).自减(--)共七种. 2.关系运算符: 用于比较运算.包括大于(& ...

  10. 运算符 &(与运算)、|(或运算)、^(异或运算)

    按位与运算符(&) 参加运算的两个数据,按二进制位进行“与”运算. 运算规则:0&0=0;  0&1=0;   1&0=0;    1&1=1; 按位或运算符( ...