需要锻炼$ 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=;char zf=;char ch=getchar();
while(ch!='-'&&!isdigit(ch))ch=getchar();
if(ch=='-')zf=-,ch=getchar();
while(isdigit(ch))x=x*+ch-'',ch=getchar();return x*zf;
}
void write(ll y){if(y<)putchar('-'),y=-y;if(y>)write(y/);putchar(y%+);}
void writeln(const ll y){write(y);putchar('\n');}
int k,m,n,x,y,z,cnt,ans;
int w[];
int calc(int x,int y){
int L=max(,x-m+),R=min(x,y-m+);
return max(,R-L+);
}
int f[][],mi[][];
int main(){
n=read();m=read();
for(rt i=;i<=n;i++)w[i]=read();
for(rt i=;i<=n;i++)f[][i]=;
for(rt i=;i<=n;i++){
mi[i][]=;
for(rt j=;j<=n;j++)mi[i][j]=1ll*mi[i][j-]*w[i]%p;
}
for(rt i=;i<=n;i++)
for(rt j=;j<=n;j++){
if(j>)f[i][j]=f[i][j-];
for(rt k=;k<=i;k++)(f[i][j]+=1ll*f[k-][j-]*f[i-k][j]%p*mi[j][calc(k,i)]%p)%=p;
}
cout<<f[n][n];
return ;
}

UOJ #311「UNR #2」积劳成疾的更多相关文章

  1. UOJ #310「UNR #2」黎明前的巧克力

    神仙题啊... UOJ #310 题意 将原集合划分成$ A,B,C$三部分,要求满足$ A,B$不全为空且$ A$的异或和等于$ B$的异或和 求方案数 集合大小 $n\leq 10^6$ 值域$v ...

  2. uoj#311. 【UNR #2】积劳成疾(期望dp)

    传送门 果然\(dp\)题就没咱啥事儿了 设\(f_{i,j}\)为长度为\(i\)的区间,所有元素的值不超过\(j\)的总的疲劳值 如果\(j\)没有出现过,那么\(f_{i,j}=f_{i,j-1 ...

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

    题目 考虑直接顺着从\(1\)填数填到\(n\)发现这是在胡扯 所以考虑一些奇诡的东西,譬如最后的答案长什么样子 显然某一种方案的贡献是一个\(\prod_{i=1}^nw_i^{t_i}\)状物,\ ...

  4. 「UNR#2」黎明前的巧克力

    「UNR#2」黎明前的巧克力 解题思路 考虑一个子集 \(S\) 的异或和如果为 \(0\) 那么贡献为 \(2^{|S|}\) ,不难列出生产函数的式子,这里的卷积是异或卷积. \[ [x^0]\p ...

  5. 「UNR#1」奇怪的线段树

    「UNR#1」奇怪的线段树 一道好题,感觉解法非常自然. 首先我们只需要考虑一次染色最下面被包含的那些区间,因为把无解判掉以后只要染了一个节点,它的祖先也一定被染了.然后发现一次染色最下面的那些区间一 ...

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

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

  7. Solution -「UNR #5」「UOJ #671」诡异操作

    \(\mathcal{Desciprtion}\)   Link.   给定序列 \(\{a_n\}\),支持 \(q\) 次操作: 给定 \(l,r,v\),\(\forall i\in[l,r], ...

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

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

  9. Diary / Solution Set -「WC 2022」线上冬眠做噩梦

      大概只有比较有意思又不过分超出能力范围的题叭.   可是兔子的"能力范围" \(=\varnothing\) qwq. 「CF 1267G」Game Relics   任意一个 ...

随机推荐

  1. SpringIOC和AOP简单概述

    Spring学习:主要学习两大块IOC   AOP 一.IOC   IOC:控制反转(也可以叫做依赖注入)的基本认识:   当某个Java对象(调用者)需要调用另一个Java对象(被依赖对象)的方法时 ...

  2. nginx 反向代理 负载均衡

    nginx反向代理 用户(浏览器) 请求网站资源 -> 直接定位到django后台(所有的请求压力,都直接给了后台) django默认对并发性 很差,并且处理网页的静态资源,效率很差 10万个并 ...

  3. mysql 有没有参数都报错“mysql: unknown option”

    报错: [root@XXXX tmp]# mysql -uroot -pmysql: unknown option '--You have new mail in /var/spool/mail/ro ...

  4. JavaScript代码组织结构良好的5个特点

    JavaScript代码组织结构良好的5个特点,随着JavaScript项目的成长,如果你不小心处理的话,他们往往会变得难以管理.我们发现自己常常陷入的一些问题: 当在创建新的页面时发现,很难重用或测 ...

  5. 2018-2019-2 20175228实验一《Java开发环境的熟悉》实验报告

    一.实验内容及步骤 (一)使用JDk编译.运行简单的Java程序 实验步骤如下: 实验截图如下: (二)使用IDEA调试程序 1.设置断点2.单步运行:Step Into(快捷捷F7)和Step Ov ...

  6. 将docker镜像上传到docker hub

  7. Python Revisited Day 13 (正则表达式)

    目录 13.1 Python的正则表达式语言 13.1.1 字符与字符类 13.1.2 量词 {m, n} ? + * 组与捕获 ?:可以关闭捕获 断言与标记 13.2 正则表达式模块 正则表达式模块 ...

  8. 其它综合-运维老鸟分享linux运维发展路线规划

    运维老鸟分享linux运维发展路线规划 linux 运维发展路线常见的就是下面两条路线: 第一条:运维应用-->系统架构-->运维开发-->系统开发 第二条:运维应用-->应用 ...

  9. Platform.Uno介绍

    编者语:Xamarin国内很多人说缺乏可用的实例,我在写书过程中在完善一些常用场景的例子,希望帮到大家.Build 2018结束一周了,善友问我要不要谈谈Xamarin的一些变化,但碍于时间有限一直没 ...

  10. 如何修改hosts文件

     如何修改hosts文件 1.进入路径 C:\Windows\System32\drivers\etc 2.拷贝hosts文件到其他地方3.修改拷贝的hosts文件,右键用记事本打开4.直接修改或添加 ...