【UOJ311】【UNR #2】积劳成疾
【题目链接】
- 点击打开链接
【思路要点】
- 笛卡尔树DP,记\(F_{i,j}\)表示长度为\(i\)的区间中所有数的最大值小于等于\(j\),所有方案的贡献之和。
- 考虑枚举区间最大值第一次出现的位置,则有:\(F_{i,j}=F_{i,j-1}+\sum_{pos=1}^{i}w_j^{min(pos,i-k+1)-max(1,pos-k+1)+1}*F_{pos-1,j-1}*F_{i-pos,j}\)。
- 预处理\(w_{i}\)乘幂的结果,时间复杂度\(O(N^3)\)。
【代码】
#include<bits/stdc++.h> using namespace std; const int MAXN = 505; const int P = 998244353; template <typename T> void read(T &x) {x = 0; int f = 1;char c = getchar();for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;for (; isdigit(c); c = getchar()) x = x * 10 + c - '0';x *= f; } template <typename T> void write(T x) {if (x < 0) x = -x, putchar('-');if (x > 9) write(x / 10);putchar(x % 10 + '0'); } template <typename T> void writeln(T x) {write(x);puts(""); } int n, k, w[MAXN]; long long dp[MAXN][MAXN]; long long power[MAXN][MAXN]; int main() {read(n), read(k);for (int i = 1; i <= n; i++)read(w[i]);for (int i = 0; i <= n; i++) {dp[0][i] = 1;for (int j = 1; j <= n; j++)dp[j][i] = dp[j - 1][i] * i % P;}for (int i = 1; i <= n; i++) {power[i][0] = 1;for (int j = 1; j <= n; j++)power[i][j] = power[i][j - 1] * w[i] % P;}for (int i = k; i <= n; i++)for (int j = 1; j <= n; j++) {long long ans = dp[i][j - 1];for (int pos = 1; pos <= i; pos++) {int l = max(1, pos - k + 1);int r = min(pos, i - k + 1);ans += power[j][r - l + 1] * dp[pos - 1][j - 1] % P * dp[i - pos][j] % P;}dp[i][j] = ans % P;}writeln(dp[n][n]);return 0; }
【UOJ311】【UNR #2】积劳成疾相关推荐
- [UOJ UNR #2]积劳成疾
来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 区间最大值的题emmmm 想到构建笛卡尔树,这样自然就想到了一种dp f[i][j]表示大小为i的笛卡尔树,根的权值是j的答案. 转移 ...
- UOJ.311.[UNR#2]积劳成疾(DP)
UOJ 序列中的每个位置是等价的.直接令\(f[i][j]\)表示,\(i\)个数的序列,最大值不超过\(j\)的所有序列每个长为\(k\)的子区间最大值的乘积的和. 由\(j-1\)转移到\(j\) ...
- 【uoj#311】[UNR #2]积劳成疾 dp
题目描述 一个长度为 $n$ 的不确定序列,每个数在 $[1,n]$ 之间.给出 $m$ ,求所有序列的 $\prod_{i=1}^{n-m+1}w[\text{Max}_{j=i}^{j+m-1}a ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- uoj311 【UNR #2】积劳成疾
传送门:http://uoj.ac/problem/311 [题解] 这题的期望dp好神奇啊(可能是我太菜了) 由于每个位置都完全一样,所以我们设$f_{i,j}$表示审了连续$i$个位置,最大值不超 ...
- 【UOJ#311】【UNR #2】积劳成疾(动态规划)
[UOJ#311][UNR #2]积劳成疾(动态规划) UOJ Solution 考虑最大值分治解决问题.每次枚举最大值所在的位置,强制不能跨过最大值,左右此时不会影响,可以分开考虑. 那么设\(f[ ...
- [期望DP] UOJ#311. 【UNR #2】积劳成疾
题意 题解 我太菜了-- 看官方题解吧: #include<cstdio> #include<algorithm> using namespace std; typedef l ...
- [DP] 【UNR #2】积劳成疾
fi,jfi,jf_{i,j} 表示长度为 iii 最大值为 j" role="presentation">jjj 的序列的答案 枚举最大值的位置转移就好了 #in ...
- [DP] UOJ #311. 【UNR #2】积劳成疾
fi,jf_{i,j}表示长为 ii 的区间 最大值是jj 的答案 转移就枚举最左边的最大值在区间的位置 前缀和优化下就好了 好像也可以fi,j,kf_{i,j,k}表示前 ii 个,末尾 KK 个中 ...
最新文章
- Python,Opencv cv2.Canny()边缘检测
- javascript里面RegExp的exec函数的总结
- 一看就知道的Java8日期处理全方位实践
- 大幅涨点!孙剑团队提出新激活层ACON和轻量级网络TFNet
- 别再问Cloudflare CDN 漏洞是怎么被利用的啦!这篇文就来告诉你
- 分布式服务动态上下线感知
- 计算机网络是如何通信的【二】
- 前端学习(2137):webpack的介绍和安装
- 你知道嵌入式,那你看过这个吗?
- 用python自己做游戏_练习项目20:使用python制作游戏(中)
- 详述Visual Studio 代码远程开发扩展中的远程命令执行漏洞
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-4.微信授权一键登录开发之授权URL获取...
- FreeSWITCH:WebRTC 配置
- 编译安装mysql-5.5.33
- ubuntu环境下android开发环境安装
- 彻底搞懂SSD网络结构
- 什么是zone?如何做zone?如何做好zone?
- Android 入门宝典 - inflate 生成视图 动态加载视图
- Linux上一个恶意程序分析实例:一步一步揭开病毒程序的面纱1
- python画二维图_python3实现绘制二维点图
热门文章
- input光标位置设置至行末端
- 数据结构考研大纲浅析
- MIPI入门——What the hell is mipi?
- 性能测试能力提升-线程、并发、吞吐量、TPS、QPS、响应时间
- 计算机管理员 职称业绩登记,任现职前主要专业技术职务工作业绩登记完整版(30页)-原创力文档...
- div标签别样的属性——tabindex
- 白光干涉衍射实验的计算机仿真,白光干涉_衍射实验的计算机仿真_蓝海江
- jQuery ajax 请求 和 Submit 提交 form 表单
- 【转】国家天文大地网
- 新版标准日本语中级_第十一课