[DP] 【UNR #2】积劳成疾
fi,jfi,jf_{i,j} 表示长度为 iii 最大值为 j" role="presentation">jjj 的序列的答案
枚举最大值的位置转移就好了
#include <cstdio>
#include <iostream>
#include <algorithm>using namespace std;const int N=410,P=998244353;int n,k,ans,a[N],f[N][N],g[N][N],pw[N][N],val[N][N];inline int Pow(int x,int y){int ret=1;for(;y;y>>=1,x=1LL*x*x%P) if(y&1) ret=1LL*ret*x%P;return ret;
}int main(){scanf("%d%d",&n,&k);for(int i=1;i<=n;i++){
scanf("%d",&a[i]);pw[i][0]=1;for(int j=1;j<=n;j++) pw[i][j]=1LL*pw[i][j-1]*a[i]%P;}for(int _n=1;_n<=n;_n++)for(int i=1;i<=_n;i++)for(int j=1;j+k-1<=_n;j++)if(j<=i && j+k-1>=i) val[_n][i]++;for(int i=1;i<=n;i++)
f[0][i]=g[0][i]=1;for(int i=1;i<k;i++)for(int j=1;j<=n;j++)f[i][j]=(Pow(j,i)+P-Pow(j-1,i))%P,g[i][j]=Pow(j,i);for(int i=k;i<=n;i++)f[i][1]=1LL*f[i-1][1]*a[1]%P,g[i][1]=f[i][1];for(int i=k;i<=n;i++)for(int j=2;j<=n;j++)for(int s=1;s<=i;s++){f[i][j]=(f[i][j]+1LL*g[s-1][j-1]*pw[j][val[i][s]]%P*g[i-s][j])%P;g[i][j]=(g[i][j-1]+f[i][j])%P;}int ans=0;for(int i=1;i<=n;i++) ans=(ans+f[n][i])%P;printf("%d\n",ans);return 0;
}
[DP] 【UNR #2】积劳成疾相关推荐
- 【uoj#311】[UNR #2]积劳成疾 dp
题目描述 一个长度为 $n$ 的不确定序列,每个数在 $[1,n]$ 之间.给出 $m$ ,求所有序列的 $\prod_{i=1}^{n-m+1}w[\text{Max}_{j=i}^{j+m-1}a ...
- UOJ.311.[UNR#2]积劳成疾(DP)
UOJ 序列中的每个位置是等价的.直接令\(f[i][j]\)表示,\(i\)个数的序列,最大值不超过\(j\)的所有序列每个长为\(k\)的子区间最大值的乘积的和. 由\(j-1\)转移到\(j\) ...
- [UOJ UNR #2]积劳成疾
来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 区间最大值的题emmmm 想到构建笛卡尔树,这样自然就想到了一种dp f[i][j]表示大小为i的笛卡尔树,根的权值是j的答案. 转移 ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- uoj #311.【UNR #2】积劳成疾 dp
题意 有n个位置,每个位置上的数是1到n中的任意一个,显然总的方案有nnnnn^n种.对于每一种方案,定义其价值为w[max(a[1..k])]∗w[max(a[2..k+1])]∗...∗w[max ...
- uoj#311. 【UNR #2】积劳成疾(期望dp)
传送门 果然\(dp\)题就没咱啥事儿了 设\(f_{i,j}\)为长度为\(i\)的区间,所有元素的值不超过\(j\)的总的疲劳值 如果\(j\)没有出现过,那么\(f_{i,j}=f_{i,j-1 ...
- [DP] UOJ #311. 【UNR #2】积劳成疾
fi,jf_{i,j}表示长为 ii 的区间 最大值是jj 的答案 转移就枚举最左边的最大值在区间的位置 前缀和优化下就好了 好像也可以fi,j,kf_{i,j,k}表示前 ii 个,末尾 KK 个中 ...
- [期望DP] UOJ#311. 【UNR #2】积劳成疾
题意 题解 我太菜了-- 看官方题解吧: #include<cstdio> #include<algorithm> using namespace std; typedef l ...
- 【UOJ#311】【UNR #2】积劳成疾(动态规划)
[UOJ#311][UNR #2]积劳成疾(动态规划) UOJ Solution 考虑最大值分治解决问题.每次枚举最大值所在的位置,强制不能跨过最大值,左右此时不会影响,可以分开考虑. 那么设\(f[ ...
最新文章
- 6.package配置相关
- Linux Kernel/optee/ATF等操作系统的异常向量表的速查
- From 百度知道 SQLSERVER 字符集排序规则简单说明
- Web框架——Flask系列之Flask简介(一)
- 第十三:Pytest参数化-@pytest.mark.parametrize装饰器来实现数据驱动测试
- 异常已存在具有相同键的条目。_灵敏度高,却已停产——山进PR-D3Plus DX收音机评测...
- python入门指南txt-【杂谈】爬虫基础与快速入门指南
- 1588: [HNOI2002]营业额统计 - BZOJ
- 10月全球浏览器份额态势:Chrome领先Firefox7.34%
- 三目表达式的错误使用
- 安卓手机误删文件恢复
- c语言析构函数的作用,详解析构函数出现的必要性
- 没学过Word排版的看过来 Word排版技巧分享
- ZYNQ-7000概述
- EasyWord的使用——POI操作Word的工具
- 网络营销实战课-文案实操案例
- 流氓软件 电脑软件管家
- 如何放大图像不模糊?图片无损放大
- 天兔oracle,Lepus_天兔的安装
- TCP三次握手代码分析与过程跟踪