UOJ #311「UNR #2」积劳成疾
需要锻炼$ DP$能力
UOJ #311
题意
等概率产生一个长度为$ n$且每个数在[1,n]间随机的数列
定义其价值为所有长度为$ k$的连续子数列的最大值的乘积
给定$ n,k$求所有合法数列的价值和
题解
设$ f(x,y)$表示长度为$x$的数列中,最值不超过$ y$的所有数列的价值和
若数列的最值不是$ y$则$ f(x,y)=f(x,y-1)$
否则枚举最左边的最值位置,设为位置$ i$
则$ f(x,y)$可由$f(i-1,y-1)·w(y)^{calc(i)}·f(x-i,y)$转移过来
其中$ calc(i)$表示在长度为$ x$的数列中有多少个长度为$ k$的数列包含第$ i$个位置
时间复杂度$ O(n^3)$
代码
#include<ctime> #include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<vector> #define p 998244353 #define rt register int #define ll long long using namespace std; inline ll read(){ll x=0;char zf=1;char ch=getchar();while(ch!='-'&&!isdigit(ch))ch=getchar();if(ch=='-')zf=-1,ch=getchar();while(isdigit(ch))x=x*10+ch-'0',ch=getchar();return x*zf; } void write(ll y){if(y<0)putchar('-'),y=-y;if(y>9)write(y/10);putchar(y%10+48);} void writeln(const ll y){write(y);putchar('\n');} int k,m,n,x,y,z,cnt,ans; int w[405]; int calc(int x,int y){int L=max(1,x-m+1),R=min(x,y-m+1);return max(0,R-L+1); } int f[405][405],mi[405][405]; int main(){n=read();m=read();for(rt i=1;i<=n;i++)w[i]=read();for(rt i=0;i<=n;i++)f[0][i]=1;for(rt i=1;i<=n;i++){mi[i][0]=1;for(rt j=1;j<=n;j++)mi[i][j]=1ll*mi[i][j-1]*w[i]%p;}for(rt i=1;i<=n;i++)for(rt j=1;j<=n;j++){if(j>1)f[i][j]=f[i][j-1];for(rt k=1;k<=i;k++)(f[i][j]+=1ll*f[k-1][j-1]*f[i-k][j]%p*mi[j][calc(k,i)]%p)%=p;}cout<<f[n][n];return 0; }
转载于:https://www.cnblogs.com/DreamlessDreams/p/10249373.html
UOJ #311「UNR #2」积劳成疾相关推荐
- [DP] UOJ #311. 【UNR #2】积劳成疾
fi,jf_{i,j}表示长为 ii 的区间 最大值是jj 的答案 转移就枚举最左边的最大值在区间的位置 前缀和优化下就好了 好像也可以fi,j,kf_{i,j,k}表示前 ii 个,末尾 KK 个中 ...
- UOJ#311. 【UNR #2】积劳成疾
https://winniechen.cn/?p=152 转载于:https://www.cnblogs.com/Winniechen/p/9306212.html
- [期望DP] UOJ#311. 【UNR #2】积劳成疾
题意 题解 我太菜了-- 看官方题解吧: #include<cstdio> #include<algorithm> using namespace std; typedef l ...
- 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】积劳成疾
题目 考虑直接顺着从\(1\)填数填到\(n\)发现这是在胡扯 所以考虑一些奇诡的东西,譬如最后的答案长什么样子 显然某一种方案的贡献是一个\(\prod_{i=1}^nw_i^{t_i}\)状物,\ ...
- uoj#311. 【UNR #2】积劳成疾(期望dp)
传送门 果然\(dp\)题就没咱啥事儿了 设\(f_{i,j}\)为长度为\(i\)的区间,所有元素的值不超过\(j\)的总的疲劳值 如果\(j\)没有出现过,那么\(f_{i,j}=f_{i,j-1 ...
- UOJ#311. 【UNR #2】积劳成疾 动态规划
思路非常巧妙,令 $f[i][j]$ 表示前 $i$ 个数,最大值不大于 $j$ 的权和. 转移的话枚举最大值出现的第一个位置,乘上该位置对应的贡献,然后发现最大值将 $1$ ~ $i$ 分成了两半. ...
- 【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】积劳成疾(动态规划)
[UOJ#311][UNR #2]积劳成疾(动态规划) UOJ Solution 考虑最大值分治解决问题.每次枚举最大值所在的位置,强制不能跨过最大值,左右此时不会影响,可以分开考虑. 那么设\(f[ ...
最新文章
- AI将成科学家“高级定制”工具
- aho-corasick php,GitHub - coralh/php-akm: Ahocorasick keyword match. Supports php7 and php5
- Java微服务(三)【本地maven配置与环境变量】(手把手编写,超级详细)
- loop指令 c语言,arm汇编loop指令
- How to bind multiple properties with formatter on one control from Ke
- greenplum gpfdist应用
- C#非泛型集合类-使用HashTable组织数据
- redis队列(list)
- 工信部:老年人拨打三大运营商客服享受一键呼入等服务
- postman 字符串中有冒号_【接口测试】Postman入门09 Postman获取HTTP请求
- 2018牛客网暑假ACM多校训练赛(第六场)I Team Rocket 线段树
- 【引用】MySQL定时任务
- 解决MAC系统字体发虚,更换默认字体为微软雅黑
- 商品归类查询服务_喜报 | 东泽国际获批进出口商品归类服务单位资质
- Gossip in Cassandra
- 计算机组成原理复习笔记——二、数据的表示和运算
- 真正牛逼的人,都是极简主义者!!
- mysql触发器不起作用_mysql – 授予模式触发器不起作用
- java飞机大战飞机背景滚动_飞机大战背景/音效动起来
- 【网络协议】TCP和HTTP中keep alive机制
热门文章
- 字节跳动测开面经(两面 + HR)
- 如何将mp4视频压缩到最小?
- Google VP8 Code 首次深入技术分析 1
- 如何在word中插入图表目录(插图清单、表格清单)
- 入门文献复现——Murphy C K——Combining belief functions when evidence conflicts
- [hdu6578]Blank
- 随心所欲b超工作站图像处理_彩超工作站B超随心所欲XP版超声随心所欲XP版
- Youtube2016推荐召回算法细节及最终实现(离线服务)——完整版
- 论文 | 图理论 | 2021年斯坦福大学Jiaxuan You博士论文《用图赋能深度学习》译读 摘要和感谢
- 光纤熔接操作步骤——详细图文光纤熔接教程