Array Beauty
给出一个长度为n的序列\(\{a_i\}\),定义一个序列的权值为其中元素两两之差的绝对值的最小值,询问\(\{a_i\}\)长度为K的子序列的权值之和\(\% 998244353\),\(2\leq k\leq n\leq 1000,max(a_i)\leq 10^5\)。
解
询问权值之和,除了枚举全部情况加起来,还有一种思路,对于每个权值看其出现的次数。
于是可以枚举权值,找规律容易知道一种方案对应权值最大上限为\(max(a_i)/(k-1)\),枚举权值i,因为子序列具有明显的可递推性,考虑dp,但是不好处理权值正好为i,这种情况,显然考虑差分。
因此设\(f[j][k]\)表示长度为j,末尾以第k个元素结尾,然后权值大于等于i的方案数,然后发现子序列的选择与顺序无关,于是可以给\(\{a_i\}\)排序,然后我们有
\]
边界:\(f[0][0]=1\)
最后对于每个i累加所有的\(\sum_{k=K}^nf[K][k]\)就是答案了。
时间复杂度为\(O(\max(a_i)/(k-1)\times nk=nmax(a_i))\)。
我觉得这到题目有几个地方,我没有反应过来,正好为某值不好求,应马上反应差分,数列集合问题第一反应是否能够排序。
参考代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define il inline
#define ri register
#define ll long long
#define Size 1050
#define xzz 998244353
using namespace std;
int a[Size],dp[Size][Size];
il void read(int&);
int main(){
int n,K,lim(0);read(n),read(K);
for(int i(1);i<=n;++i)
read(a[i]),lim=max(lim,a[i]);
sort(a+1,a+n+1),a[0]=-0x3f3f3f3f;
int i,j,k,l,r,ans(0);
for(i=1;i<=lim/(K-1);++i){
for(j=1,dp[0][0]=1;j<=K;++j)
for(k=j,l=j-1,r=0;k<=n;++k){
while(a[k]-a[l]>=i)
r=(r+dp[j-1][l])%xzz,++l;
dp[j][k]=r;
}
for(k=K;k<=n;++k)ans=(ans+dp[K][k])%xzz;
}printf("%d",ans);
return 0;
}
il void read(int &x){
x^=x;ri char c;while(c=getchar(),c<'0'||c>'9');
while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
}
Array Beauty的更多相关文章
- CF1188C Array Beauty(DP)
日常降智. 不过还是第一次和 2700 的题正解这么近呢-- 由于排序后不影响答案,而且直觉告诉我们排序后会更好做,不妨排个序. 直觉告诉我们,变成求最小差 \(\ge v\) 的方案数会比最小差 \ ...
- Array Beauty CodeForces - 1189F (dp,好题)
大意: 定义$n$元素序列$a$的美丽度为 $\min\limits_{1\le i<j\le n}|a_i-a_j|$. 给定序列$a$, 求$a$的所有长为$k$的子序列的美丽度之和. 记 ...
- Codeforces 1189F. Array Beauty
传送门 首先可以注意到序列里面元素的顺序对答案是没有影响的,所以二话不说先排序再看看怎么搞 考虑枚举每种子序列可能产生的贡献并算一下产生这个贡献的子序列有多少 考虑设 $F(x)$ 表示选择的元素差值 ...
- Codeforces Round #365 (Div. 2) D 树状数组+离线处理
D. Mishka and Interesting sum time limit per test 3.5 seconds memory limit per test 256 megabytes in ...
- Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum 离线+线段树
题目链接: http://codeforces.com/contest/703/problem/D D. Mishka and Interesting sum time limit per test ...
- codeforces D
D. Mishka and Interesting sum time limit per test 3.5 seconds memory limit per test 256 megabytes in ...
- Mishka and Interesting sum
Mishka and Interesting sum time limit per test 3.5 seconds memory limit per test 256 megabytes input ...
- Codeforces Round #365 (Div. 2) D.Mishka and Interesting sum 树状数组+离线
D. Mishka and Interesting sum time limit per test 3.5 seconds memory limit per test 256 megabytes in ...
- codeforces 703D Mishka and Interesting sum 偶数亦或 离线+前缀树状数组
题目传送门 题目大意:给出n个数字,m次区间询问,每一次区间询问都是询问 l 到 r 之间出现次数为偶数的数 的亦或和. 思路:偶数个相同数字亦或得到0,奇数个亦或得到本身,那么如果把一段区间暴力亦或 ...
随机推荐
- 用私有构造器或者枚举类型强化SingleTon(单例)属性
单例(singleton)就是一个只实例化一次的类.使类成为单例可能会使它的测试变得困难,因为除非它实现了作为其类型的接口,否则不可能用模拟实现来代替这个单例.下面是几种实现单例的方法: 1.共有静态 ...
- python bezier 曲线
1.手写bezier公式,生成bezier代码, 如果给的点数过多,则会生成一半bezier曲线,剩下的一半就需要进行拼接: import numpy as np import matplotlib. ...
- 关于云计算三大服务模式LAAS,PAAS,SAAS的含义及区别
根据NIST的权威定义,云计算有SPI,即SAAS,PAAS和LAAS三大服务模式,上层是SAAS,中间层是PAAS,底层是LAAS,一层支撑一层. LAAS(Infrastucture-as-a-S ...
- linux centos7 安装Phabircator
Phabricator 是facebook开发的一套代码审核工具,基于PHP和Mysql开发. 准备工作: 系统:Linux CentOS7 环境: Apache(或nginx,或lighttpd): ...
- 微信小程序常用API组件开发
关于小程序 张小龙定义小程序: 1.不需要下载安装即可使用: 2.用完即走,不用关心是否安装太多应用: 3.应用无处不在,随时可用. 特点: 1.适合业务逻辑简单的应用: 2,.适合低频应用: 3.适 ...
- php多张图片打包下载
<?php /** * 图片打包下载 */ namespace app\common\extend; class Imagedown { var $datasec = array (); var ...
- Red Hat Enterprise Linux 7.x新特性
Red Hat Enterprise Linux 7.x新特性 RHEL7新特性简介 1. RHEL7目前支持架构 64-bit AMD.64-bit Intel.IBM POWER.IBM ...
- Tomcat_shutdown
@echo off echo 执行开始时间 date/t time/t echo *********************************************** echo 正在关闭To ...
- iframe调用页面中的局部部分
iframe 调用网页,div遮挡展现局部. <div style=" width:iframe宽度; height:iframe高度; overflow:hidden "& ...
- 关于audio不能拖放
图一,图二均为wav格式文件 图一为播放本地的音频,可以拖放 图二为放在后台的音频,不可以拖放 把这两个图片发给后台,让后台分析下两个的headers不同之处