[UOJ311]积劳成疾
题解
dp
似乎这个最大值不好设计状态啊==
但是可以发现这\(n\)个点每个点都是相同的
可以设计状态\(f_{i,j}\)表示一个长度为\(i\)的一段区间的最大值不会超过\(j\)的价值
那么转移就类似于区间\(DP\),先枚举长度,再枚举最大值,然后再暴力枚举一个位置表示这个最大值最靠右的位置,然后计算这个最大值跨过这个区间的贡献即可
\(f_{i,j}=f_{i,j-1}+\sum_{k=1}^{i}{f_{k-1,j} \times f_{i-k,j - 1} \times p_{j}^{有几个长度为m的区间跨过了这个最大值}}\)
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
const int M = 405 ;
const int mod = 998244353 ;
using namespace std ;inline int read() {char c = getchar() ; int x = 0 , w = 1 ;while(c>'9'||c<'0') { if(c=='-') w = -1 ; c = getchar() ; }while(c>='0'&&c<='9') { x = x*10+c-'0' ; c = getchar() ; }return x*w ;
}int n , m ;
int val[M][M] , f[M][M] ;inline int T(int len , int k) {int l = max(1 , k - m + 1) , r = min(len , k + m - 1) ;return max(r - l - m + 2 , 0) ;
}
int main() {n = read() ; m = read() ;for(int i = 1 ; i <= n ; i ++) {val[i][0] = 1 ; val[i][1] = read() ;for(int j = 2 ; j <= n ; j ++)val[i][j] = 1LL * val[i][j - 1] * val[i][1] % mod ;}for(int i = 0 ; i <= n ; i ++) f[0][i] = 1 ;for(int i = 1 ; i <= n ; i ++)for(int j = 1 ; j <= n ; j ++) {f[i][j] = f[i][j - 1] ;for(int k = 1 ; k <= i ; k ++)f[i][j] = (f[i][j] + 1LL * f[k - 1][j] * f[i - k][j - 1] % mod * val[j][T(i , k)] % mod) % mod ;}printf("%d\n",f[n][n]) ;return 0 ;
}
转载于:https://www.cnblogs.com/beretty/p/10695108.html
[UOJ311]积劳成疾相关推荐
- uoj311 【UNR #2】积劳成疾
传送门:http://uoj.ac/problem/311 [题解] 这题的期望dp好神奇啊(可能是我太菜了) 由于每个位置都完全一样,所以我们设$f_{i,j}$表示审了连续$i$个位置,最大值不超 ...
- 【UOJ311】【UNR #2】积劳成疾
[题目链接] 点击打开链接 [思路要点] 笛卡尔树DP,记\(F_{i,j}\)表示长度为\(i\)的区间中所有数的最大值小于等于\(j\),所有方案的贡献之和. 考虑枚举区间最大值第一次出现的位置, ...
- smart原则_《红楼梦》凤姐做领导为什么积劳成疾?只因为不懂SMART原则
凤姐是荣国府鞠躬尽瘁的CEO,一生勤劳,兢兢业业,为了贾府殚精竭虑,积劳成疾.如果她能懂得运用SMART原则,兴许就不会早早算了卿卿性命. 王熙凤 一.凤姐是个有能力的CEO (一)协理宁国府扬名立万 ...
- [期望DP] UOJ#311. 【UNR #2】积劳成疾
题意 题解 我太菜了-- 看官方题解吧: #include<cstdio> #include<algorithm> using namespace std; typedef l ...
- [UOJ UNR #2]积劳成疾
来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 区间最大值的题emmmm 想到构建笛卡尔树,这样自然就想到了一种dp f[i][j]表示大小为i的笛卡尔树,根的权值是j的答案. 转移 ...
- 【UOJ#311】【UNR #2】积劳成疾(动态规划)
[UOJ#311][UNR #2]积劳成疾(动态规划) UOJ Solution 考虑最大值分治解决问题.每次枚举最大值所在的位置,强制不能跨过最大值,左右此时不会影响,可以分开考虑. 那么设\(f[ ...
- UOJ.311.[UNR#2]积劳成疾(DP)
UOJ 序列中的每个位置是等价的.直接令\(f[i][j]\)表示,\(i\)个数的序列,最大值不超过\(j\)的所有序列每个长为\(k\)的子区间最大值的乘积的和. 由\(j-1\)转移到\(j\) ...
- [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 个中 ...
最新文章
- 陈道明还原度最高!AI 脑补宋明清皇帝长相,四大模型构想真实五官
- FAQ about AJAX-part II
- 竞赛报名 | AI时代数据库交互怎么玩?首届中文NL2SQL挑战赛开战
- 使用redis实现订阅功能
- JavaEE实战班第八天
- SpringAOP 注解方式代码示例
- linux远程登录模拟输入输出重定向,从零开始学习Linux(三十三):Shell基础之输入输出重定向...
- 利用nginx-rtmp搭建视频点播、直播、HLS服务器
- Visual Studio2012 安装教程
- libaio.so.1 is needed by MySQL-server-5.5.48-1.linux2.6.i386
- win10运行窗口打开共享服务器很慢,win10局域网共享文件慢怎么办 局域网共享文件夹无法访问是什么原因...
- 武汉最最最牛逼的IT公司全在这了
- python notebook打不开_jupyter notebook打不开怎么办
- 别瞎学了,我的MySQL学习之路(超详细超硬核)
- 一个简易版的新闻应用(同时兼容手机和平板)
- 在windows中使用bat脚本获取linux服务器文件
- 「码力全开」假如今年公司中秋的月饼由你来设计
- 西铁城s621c打印机调试说明,西铁城CL-S621CII驱动
- Makefile 文件的编写
- 电路板上为何要有孔洞?何谓PTH/NPTH/vias(导通孔)