传送门
本题是让计算方案数,考虑如何设计dp的状态,注意到我们需要计数的排列的性质与前若干个元素的最大值有关。不妨先将aaa数组从小到大排个序,然后用dp[i][j]dp[i][j]dp[i][j]表示长度为iii的排列满足最大元素为aja_jaj​且符合题目所述性质的方案数。这里分两种情况来计算方案数:
首先我们考虑这个排列末尾的元素是多少,如果是aja_jaj​,那么意味着前i−1i-1i−1个元素的最大值的两倍不能超过aja_jaj​,不妨枚举这个最大值,假设hjh_jhj​表示值的两倍不超过aja_jaj​的数的最大下标,那么我们枚举1∼hj1\sim h_j1∼hj​的元素作为排列前i−1i-1i−1位置中元素的最大值分别计算方案数即可,其实也就是∑k=1hjdp[i−1][k]\sum_{k=1}^{h_j}dp[i-1][k]∑k=1hj​​dp[i−1][k]。
然后我们考虑这个排列末尾的元素不是aja_jaj​,显然这个元素的两倍还是不能超过aja_jaj​,满足这个性质的元素的个数有hjh_jhj​个,不过前i−1i-1i−1个位置中会用去i−2i-2i−2个这些元素,故还剩下可选的有hj−(i−2)h_j-(i-2)hj​−(i−2)个元素放在排列末尾。而前i−1i-1i−1个元素由于最大值是aja_jaj​,那么方案数就是dp[i−1][j]dp[i-1][j]dp[i−1][j],注意到第iii个位置我们有hj−(i−2)h_j-(i-2)hj​−(i−2)种选法,故总共有dp[i−1][j]⋅(hj−i+2)dp[i-1][j]\cdot (h_j-i+2)dp[i−1][j]⋅(hj​−i+2)种方案。

结合两种情况我们不难得到dpdpdp方程,也就是dp[i][j]=∑k=1hjdp[i−1][k]+(hj−i+2)⋅dp[i−1][j]dp[i][j]=\sum_{k=1}^{h_j}dp[i-1][k]+(h_j-i+2)\cdot dp[i-1][j]dp[i][j]=∑k=1hj​​dp[i−1][k]+(hj​−i+2)⋅dp[i−1][j]。
注意到前缀和很容易维护,因此O(n2)O(n^2)O(n2)递推便可求出dpdpdp,最后答案是dp[n][n]dp[n][n]dp[n][n]。
初始化的话dp[0][0]=1dp[0][0]=1dp[0][0]=1。

这里给出一份参考代码:

int h[maxn],a[maxn],dp[maxn][maxn],sm[2][maxn];
int main(){int n=rd();FOR(i,1,n+1)a[i]=rd();sort(a+1,a+1+n);FOR(i,1,n+1){int k=lower_bound(a+1,a+1+n,2*a[i])-a;if(k!=n+1)h[k]=i;}FOR(i,1,n+1)h[i]=max(h[i],h[i-1]);FOR(i,0,n+1)sm[1][i]=1;FOR(i,1,n+1){FOR(j,i,n+1){if(h[j]>=i-1)dp[i][j]=sum(sm[i&1][h[j]],1ll*(h[j]-i+2)*dp[i-1][j]%mod);sm[!(i&1)][j]=sum(sm[!(i&1)][j-1],dp[i][j]);}FOR(j,0,n+1)sm[i&1][j]=0;}wrn(dp[n][n]);
}

acm-(dp计数)Educational Codeforces Round 97 (Rated for Div. 2) F. Emotional Fishermen相关推荐

  1. Educational Codeforces Round 73 (Rated for Div. 2) F. Choose a Square 线段树 + 二维转一维

    传送门 文章目录 题意: 思路: 题意: 给你nnn个点(xi,yi)(x_i,y_i)(xi​,yi​),每个点有个价值cic_ici​,现在你可以框一个正方形,要求左下角和右上角的坐标(x,y)( ...

  2. Educational Codeforces Round 76 (Rated for Div. 2) F. Make Them Similar 折半搜索

    传送门 文章目录 题意: 思路: 题意: 思路: 一个显然的思路就是2302^{30}230枚举所有的xxx,让后再检查,这个复杂度显然不能接受. 又发现对于每个位置它取多少不受其他位置限制,满足可拼 ...

  3. Educational Codeforces Round 81 (Rated for Div. 2) F.Good Contest \ 洛谷 划艇 组合 计数dp

    cf传送门 P3643 [APIO2016]划艇 文章目录 题意: 思路: 题意: aia_iai​在[li,ri][l_i,r_i][li​,ri​]等概率随机选一个数,求aaa数组不增的概率. 思 ...

  4. 数位dp:Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum

    给出上下界,让你求出其中满足条件:不同的数字的数量不超过k个的数字的总和,答案模998244353,比如123里不同的数字个数为3,113里不同的数字个数为2,111里不同的数字个数为1. 跟普通的数 ...

  5. 【细节很多的dp】Educational Codeforces Round 133 (Rated for Div. 2) C. Robot in a Hallway

    参考题解 题意: 有一个 2 2 2 行, m m m 列的方格,初始在 ( 1 , 1 ) (1,1) (1,1),每个格子有一个开放时间,开放时间后才能到达,每个格子只能被到达一次,你可以任意选择 ...

  6. Educational Codeforces Round 101 (Rated for Div. 2) F. Power Sockets 哈希 + 乱搞

    传送门 题意: 给一个二进制串aaa,让后定义两个串相似为有至少一个相同位置相等.现在让你找一个字典序最小的长度为kkk的串使其与aaa中每个长度为kkk的字串相似. 思路: 首先我们知道所有可能的串 ...

  7. Educational Codeforces Round 87 (Rated for Div. 2) F. Summoning Minions

    题目链接 Polycarp plays a computer game. In this game, the players summon armies of magical minions, whi ...

  8. Educational Codeforces Round 41 (Rated for Div. 2) F. k-substrings

    F. k-substrings time limit per test 4 seconds memory limit per test 256 megabytes input standard inp ...

  9. Educational Codeforces Round 111 (Rated for Div. 2) E. Stringforces 二分 + 状压dp

    传送门 文章目录 题意: 思路: 题意: 给你一个串,只包含前kkk个字母和???,定义fif_ifi​表示第iii个字母在串中出现的最长连续长度,你现在需要将???替换为前kkk个字母,使得mini ...

  10. Educational Codeforces Round 73 (Rated for Div. 2) Make The Fence Great Again dp + 结论

    传送门 文章目录 题意: 思路: 题意: 思路: 首先证明一个结论:一个数最多被加两次. 首先假设a[i]=a[i−1]a[i]=a[i-1]a[i]=a[i−1]或a[i]=a[i+1]a[i]=a ...

最新文章

  1. Caffe 中的卷积--权宜之计
  2. emacs命令速查 摘
  3. Python机器学习(三)--决策树算法
  4. 忙里偷闲看了几部片子
  5. 谈大数据里各子项目搭建时的环境变量配置(深入)
  6. PHP在Windows环境下获取GMT时间
  7. hashCode和equals方法的关系
  8. 聚焦一切关联需求-企业数字化转型:外部驱动力之客户篇
  9. 如何生成.p12文件
  10. 云南省人口密度格网数据
  11. DRAM Devices Organization
  12. 游记_秦皇岛-北戴河两日游
  13. 罗技c270摄像头支持linux,罗技C270摄像头的使用心得
  14. 解析几何 曲线与二次曲面 曲面方程与坐标变换(2.1,2.2)
  15. 网页版outlook邮箱慢如蜗牛登不上,解决办法
  16. IC基础知识(十一)时钟周期、状态周期、机器周期、指令周期和总线周期的定义及关系
  17. yolo模型是什么神经网络,yolo是卷积神经网络吗
  18. 趣店再次收到不合规通知函:市值不足2亿美元 面临退市危机
  19. GLSL ES 语言—矢量矩阵运算
  20. QT使用openGL绘制一个三角形

热门文章

  1. 在java中使用RBL服务器(中国反垃圾邮件联盟的CBL+使用)
  2. lsf服务器窗口显示,LSF指定进程提交到指定QUEUES中
  3. 疫情之下,企业如何突围?
  4. 完成有顺序约束的任务指派问题--应用模拟退火算法求解
  5. 解决VBE6EXT.OLB不能被加载问题
  6. Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns解决方法
  7. kali渗透综合靶机(九)--Typhoon靶机
  8. 资历越深,越是负资产
  9. Android7.1.1新增Shortcuts快捷方式,让App更加快捷方便
  10. PyQt(Python+Qt)学习随笔:Model中项的标记flags取值及枚举类型Qt.ItemFlag