【题目链接】

  • 点击打开链接

【思路要点】

  • 笛卡尔树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】积劳成疾相关推荐

  1. [UOJ UNR #2]积劳成疾

    来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 区间最大值的题emmmm 想到构建笛卡尔树,这样自然就想到了一种dp f[i][j]表示大小为i的笛卡尔树,根的权值是j的答案. 转移 ...

  2. UOJ.311.[UNR#2]积劳成疾(DP)

    UOJ 序列中的每个位置是等价的.直接令\(f[i][j]\)表示,\(i\)个数的序列,最大值不超过\(j\)的所有序列每个长为\(k\)的子区间最大值的乘积的和. 由\(j-1\)转移到\(j\) ...

  3. 【uoj#311】[UNR #2]积劳成疾 dp

    题目描述 一个长度为 $n$ 的不确定序列,每个数在 $[1,n]$ 之间.给出 $m$ ,求所有序列的 $\prod_{i=1}^{n-m+1}w[\text{Max}_{j=i}^{j+m-1}a ...

  4. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  5. uoj311 【UNR #2】积劳成疾

    传送门:http://uoj.ac/problem/311 [题解] 这题的期望dp好神奇啊(可能是我太菜了) 由于每个位置都完全一样,所以我们设$f_{i,j}$表示审了连续$i$个位置,最大值不超 ...

  6. 【UOJ#311】【UNR #2】积劳成疾(动态规划)

    [UOJ#311][UNR #2]积劳成疾(动态规划) UOJ Solution 考虑最大值分治解决问题.每次枚举最大值所在的位置,强制不能跨过最大值,左右此时不会影响,可以分开考虑. 那么设\(f[ ...

  7. [期望DP] UOJ#311. 【UNR #2】积劳成疾

    题意 题解 我太菜了-- 看官方题解吧: #include<cstdio> #include<algorithm> using namespace std; typedef l ...

  8. [DP] 【UNR #2】积劳成疾

    fi,jfi,jf_{i,j} 表示长度为 iii 最大值为 j" role="presentation">jjj 的序列的答案 枚举最大值的位置转移就好了 #in ...

  9. [DP] UOJ #311. 【UNR #2】积劳成疾

    fi,jf_{i,j}表示长为 ii 的区间 最大值是jj 的答案 转移就枚举最左边的最大值在区间的位置 前缀和优化下就好了 好像也可以fi,j,kf_{i,j,k}表示前 ii 个,末尾 KK 个中 ...

最新文章

  1. Python,Opencv cv2.Canny()边缘检测
  2. javascript里面RegExp的exec函数的总结
  3. 一看就知道的Java8日期处理全方位实践
  4. 大幅涨点!孙剑团队提出新激活层ACON和轻量级网络TFNet
  5. 别再问Cloudflare CDN 漏洞是怎么被利用的啦!这篇文就来告诉你
  6. 分布式服务动态上下线感知
  7. 计算机网络是如何通信的【二】
  8. 前端学习(2137):webpack的介绍和安装
  9. 你知道嵌入式,那你看过这个吗?
  10. 用python自己做游戏_练习项目20:使用python制作游戏(中)
  11. 详述Visual Studio 代码远程开发扩展中的远程命令执行漏洞
  12. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-4.微信授权一键登录开发之授权URL获取...
  13. FreeSWITCH:WebRTC 配置
  14. 编译安装mysql-5.5.33
  15. ubuntu环境下android开发环境安装
  16. 彻底搞懂SSD网络结构
  17. 什么是zone?如何做zone?如何做好zone?
  18. Android 入门宝典 - inflate 生成视图 动态加载视图
  19. Linux上一个恶意程序分析实例:一步一步揭开病毒程序的面纱1
  20. python画二维图_python3实现绘制二维点图

热门文章

  1. input光标位置设置至行末端
  2. 数据结构考研大纲浅析
  3. MIPI入门——What the hell is mipi?
  4. 性能测试能力提升-线程、并发、吞吐量、TPS、QPS、响应时间
  5. 计算机管理员 职称业绩登记,任现职前主要专业技术职务工作业绩登记完整版(30页)-原创力文档...
  6. div标签别样的属性——tabindex
  7. 白光干涉衍射实验的计算机仿真,白光干涉_衍射实验的计算机仿真_蓝海江
  8. jQuery ajax 请求 和 Submit 提交 form 表单
  9. 【转】国家天文大地网
  10. 新版标准日本语中级_第十一课