传送门

题意:给一个长度为NNN的序列aaa,从中选出kkk个,定义一个序列的美丽度为最接近的两个数的差的绝对值,求所有方案的美丽度之和模998244353998244353998244353。

N≤1000,ai≤100000N \leq 1000,a_i \leq100000N≤1000,ai​≤100000

显然先排个序,枚举美丽度求方案数。

设美丽度为ddd,我们希望求出选出kkk个数,相邻两数的差不小于ddd

显然可以dp

dp(i,j)dp(i,j)dp(i,j)表示前iii个选jjj个且最后一个必选的方案数。

dp(i,j)=∑ai−ak≥ddp(k,j−1)dp(i,j)=\sum_{a_i-a_k\geq d}dp(k,j-1)dp(i,j)=ai​−ak​≥d∑​dp(k,j−1)

一个前缀和就完事了

总复杂度O(annk)O(a_nnk)O(an​nk)

冷静分析,我们发现随着ddd的增加,数会越来越小。当到达一定的程度后就是000了。

容易算出这个值是⌊an−a1k−1⌋\lfloor\frac{a_n-a_1}{k-1}\rfloor⌊k−1an​−a1​​⌋

所以只用枚举这么多个

复杂度O(an−a1k−1nk)=O(ann)O(\frac{a_n-a_1}{k-1}nk)=O(a_nn)O(k−1an​−a1​​nk)=O(an​n)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <algorithm>
#define MAXN 1005
#define MAXM 100005
using namespace std;
typedef long long ll;
const int MOD=998244353;
inline int add(const int& x,const int& y){return x+y>=MOD? x+y-MOD:x+y;}
inline int dec(const int& x,const int& y){return x<y? x+MOD-y:x-y;}
int a[MAXN];
int dp[MAXN][MAXN],ans[MAXM];
int main()
{int n,k;scanf("%d%d",&n,&k);for (int i=1;i<=n;i++) scanf("%d",&a[i]);sort(a+1,a+n+1);int mx=(a[n]-a[1])/(k-1);for (int d=1;d<=mx;d++){for (int i=1;i<=k;i++)for (int j=1;j<=n;j++)dp[i][j]=0;for (int i=1;i<=n;i++) dp[1][i]=1;for (int i=2;i<=k;i++){int pos=0,sum=0;for (int j=1;j<=n;j++){while (pos<n&&a[j]-a[pos+1]>=d)sum=add(sum,dp[i-1][++pos]);   dp[i][j]=sum;          }       }for (int i=1;i<=n;i++) ans[d]=add(ans[d],dp[k][i]);}int res=0;for (int i=1;i<=mx;i++) res=add(res,ans[i]);printf("%d\n",res);return 0;
}

这题交了四发,是个憨憨。

【CF1189F】Array Beauty【dp】【复杂度玄学优化】相关推荐

  1. 【CF 1188 A1,B,C】Add on a Tree // Count Pairs // Array Beauty

    传送门 这些天风也温柔,题也温柔 开车啦! 文章目录 A1:Add on a Tree 题意翻译 题解 证明 代码实现 B:Count Pairs 题意翻译 题解 代码实现 C:Array Beaut ...

  2. 洛谷P5071 [YNOI2015]此时此刻的光辉 莫队+玄学优化+卡常QWQ

    题目链接:传送门 在太阳西斜的这个世界里,置身天上之森.等这场战争结束之后,不归之人与望眼欲穿的众人, 人人本着正义之名,长存不灭的过去.逐渐消逝的未来.我回来了,纵使日薄西山,即便看不到未来,此时此 ...

  3. 凡事都得有个度,SEO优化过程的七大忌讳...

    我们知道,凡事都得有个度.SEO也是如此,优化必须掌握好度,优化得不够,刚效果不理想,如果过度优化,又被有被惩罚的危险,所以,我们必要了解一些网站优化的忌讳. 忌讳一:网站内容纯采集 如果你是一个不擅 ...

  4. 小魂和他的数列(dp+树状数组优化)

    链接:https://ac.nowcoder.com/acm/contest/3566/C 来源:牛客网 Sometimes, even if you know how something's goi ...

  5. CodeForces - 1480D2 Painting the Array II(dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,现在要求拆分成两个子序列,使得两个子序列的贡献之和最 小.对于一个序列的贡献就是,去掉相邻且相同的字母后的长度,即 ∑i=1n[a[i]! ...

  6. 【线性dp】【决策优化】CH5E02

    题面 给你一个n*m的矩阵,要求每一行选择一个数,并且第i行选择的位置a[i]一定要大于第i-1行选择的位置a[i-1],求选取的数的总和为多少,输出一组字典序最小的a[1]到a[n].1<=n ...

  7. 算法讲解 -- 区间dp经典模型与优化(石子归并)

    石子合并问题是最经典的DP问题.首先它有如下3种题型: PPT讲解:点击打开链接 (1)有N堆石子,现要将石子有序的合并成一堆,规定如下:每次只能移动任意的2堆石子合并,合并花费为新合成的一堆石子的数 ...

  8. [JZOJ5641] 林克卡特树【树形DP】【凸优化】

    Description 给定一棵n个节点的树,边有边权(可能为负). 你需要删掉恰好K条边,再连上恰好K条边权为0的边,并保证连完边后这还是一棵树,求这棵树的最大的最长路长度. K<n≤3000 ...

  9. 队列优化dijsktra(SPFA)的玄学优化

    转载:大佬博客 最近想到了许多优化spfa的方法,这里想写个日报与大家探讨下 前置知识:spfa(不带任何优化) 由于使用较多 STLSTL ,本文中所有代码的评测均开启 O_2O2​ 优化 对一些数 ...

最新文章

  1. win32 打印机api
  2. td不显示边框_FANUC Series 0i Mate-TD系统上电显示SP1241 (S)D/A变换器异常维修,FANUC主板SP1_维修中心...
  3. 计算机系统的基本功能,计算机系统的主要功能是什么
  4. 如何实现Conditional Include
  5. 怎么查看jre版本_javac和java版本不一致问题
  6. C语言再学习 -- 关于注释
  7. SAP Fiori extension hook added via note
  8. Kubernetes 部署 Ingress 控制器 Traefik v2.1
  9. 8、SpringBoot+Mybatis整合------参数取值方式
  10. 机器学习-吴恩达-笔记-6-应用机器学习的建议
  11. 【转载】BROCADE交换机配置
  12. 华硕笔记本 X550JD4710HQ
  13. STM32F103使用硬件i2c作为从机模式
  14. 毫米焦距到像素焦距换算
  15. js函数提升和变量提升_关于在js中提升的真相
  16. HTML5隐藏图片代码,HTML5终极备忘大全(图片版+文字版)
  17. 【安全资讯】起因222个摄像头,特斯拉工厂教会IoT行业的事
  18. 19.2. /etc/shells
  19. echarts x轴数据旋转
  20. 利好消息!康复肺炎患者抗体血浆有助于拯救危重病人!捐献号召一呼百应

热门文章

  1. python程序题斐波那契数列_Python_经典题_斐波那契数列
  2. 几何学中关于相交圆的这个定理,你还记得吗?
  3. 现在的娃娃有多智能?
  4. 当女朋友学会「监视」男朋友......
  5. 从飞机上看下雨是这样子,太震撼了!
  6. 掌握Python爬虫基础,仅需1小时!
  7. mysql root密码忘记2018_2018-03-28设置及修改mysql用户密码学习笔记
  8. oracle绑定变量过多,oracle - 在SQL Plus中使用绑定变量并返回多行? - 堆栈内存溢出...
  9. php post api json数据,php – REST API:请求身份为JSON或纯POST数据?
  10. android复选按钮,Android的复选框的详细开发案例分析