【CF1189F】Array Beauty【dp】【复杂度玄学优化】
传送门
题意:给一个长度为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(annk)
冷静分析,我们发现随着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−a1nk)=O(ann)
#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】【复杂度玄学优化】相关推荐
- 【CF 1188 A1,B,C】Add on a Tree // Count Pairs // Array Beauty
传送门 这些天风也温柔,题也温柔 开车啦! 文章目录 A1:Add on a Tree 题意翻译 题解 证明 代码实现 B:Count Pairs 题意翻译 题解 代码实现 C:Array Beaut ...
- 洛谷P5071 [YNOI2015]此时此刻的光辉 莫队+玄学优化+卡常QWQ
题目链接:传送门 在太阳西斜的这个世界里,置身天上之森.等这场战争结束之后,不归之人与望眼欲穿的众人, 人人本着正义之名,长存不灭的过去.逐渐消逝的未来.我回来了,纵使日薄西山,即便看不到未来,此时此 ...
- 凡事都得有个度,SEO优化过程的七大忌讳...
我们知道,凡事都得有个度.SEO也是如此,优化必须掌握好度,优化得不够,刚效果不理想,如果过度优化,又被有被惩罚的危险,所以,我们必要了解一些网站优化的忌讳. 忌讳一:网站内容纯采集 如果你是一个不擅 ...
- 小魂和他的数列(dp+树状数组优化)
链接:https://ac.nowcoder.com/acm/contest/3566/C 来源:牛客网 Sometimes, even if you know how something's goi ...
- CodeForces - 1480D2 Painting the Array II(dp)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,现在要求拆分成两个子序列,使得两个子序列的贡献之和最 小.对于一个序列的贡献就是,去掉相邻且相同的字母后的长度,即 ∑i=1n[a[i]! ...
- 【线性dp】【决策优化】CH5E02
题面 给你一个n*m的矩阵,要求每一行选择一个数,并且第i行选择的位置a[i]一定要大于第i-1行选择的位置a[i-1],求选取的数的总和为多少,输出一组字典序最小的a[1]到a[n].1<=n ...
- 算法讲解 -- 区间dp经典模型与优化(石子归并)
石子合并问题是最经典的DP问题.首先它有如下3种题型: PPT讲解:点击打开链接 (1)有N堆石子,现要将石子有序的合并成一堆,规定如下:每次只能移动任意的2堆石子合并,合并花费为新合成的一堆石子的数 ...
- [JZOJ5641] 林克卡特树【树形DP】【凸优化】
Description 给定一棵n个节点的树,边有边权(可能为负). 你需要删掉恰好K条边,再连上恰好K条边权为0的边,并保证连完边后这还是一棵树,求这棵树的最大的最长路长度. K<n≤3000 ...
- 队列优化dijsktra(SPFA)的玄学优化
转载:大佬博客 最近想到了许多优化spfa的方法,这里想写个日报与大家探讨下 前置知识:spfa(不带任何优化) 由于使用较多 STLSTL ,本文中所有代码的评测均开启 O_2O2 优化 对一些数 ...
最新文章
- win32 打印机api
- td不显示边框_FANUC Series 0i Mate-TD系统上电显示SP1241 (S)D/A变换器异常维修,FANUC主板SP1_维修中心...
- 计算机系统的基本功能,计算机系统的主要功能是什么
- 如何实现Conditional Include
- 怎么查看jre版本_javac和java版本不一致问题
- C语言再学习 -- 关于注释
- SAP Fiori extension hook added via note
- Kubernetes 部署 Ingress 控制器 Traefik v2.1
- 8、SpringBoot+Mybatis整合------参数取值方式
- 机器学习-吴恩达-笔记-6-应用机器学习的建议
- 【转载】BROCADE交换机配置
- 华硕笔记本 X550JD4710HQ
- STM32F103使用硬件i2c作为从机模式
- 毫米焦距到像素焦距换算
- js函数提升和变量提升_关于在js中提升的真相
- HTML5隐藏图片代码,HTML5终极备忘大全(图片版+文字版)
- 【安全资讯】起因222个摄像头,特斯拉工厂教会IoT行业的事
- 19.2. /etc/shells
- echarts x轴数据旋转
- 利好消息!康复肺炎患者抗体血浆有助于拯救危重病人!捐献号召一呼百应
热门文章
- python程序题斐波那契数列_Python_经典题_斐波那契数列
- 几何学中关于相交圆的这个定理,你还记得吗?
- 现在的娃娃有多智能?
- 当女朋友学会「监视」男朋友......
- 从飞机上看下雨是这样子,太震撼了!
- 掌握Python爬虫基础,仅需1小时!
- mysql root密码忘记2018_2018-03-28设置及修改mysql用户密码学习笔记
- oracle绑定变量过多,oracle - 在SQL Plus中使用绑定变量并返回多行? - 堆栈内存溢出...
- php post api json数据,php – REST API:请求身份为JSON或纯POST数据?
- android复选按钮,Android的复选框的详细开发案例分析