沉玉谷

news/2024/10/15 22:10:48

沉玉谷

每次可以删除颜色相同的连续段。

删除的次数、顺序不同,答案就不一样。

因此题目即为求合法的删除方案数。

看数据范围,\(N\)\(50\)!因此我们需要 \(O(N^{4\sim 6})\) 时间复杂度的算法。

这么高时间复杂度,本蒟蒻只能想到 DP。

区间 DP

\(dp_{len,l,k}\) 表示区间 \([l,l+len-1]\) 删除 \(k\) 次删完的方案数,考虑转移。

\(r=l+len-1\)

转移得到 \(dp_{len,l,k}\) 可以这样想:

由区间 \([l,r-1]\) 后加一位 \(a_{r}\) 得到区间 \([l,r]\) 的答案。

  1. 分别删除区间 \([l,r-1]\)\(a_r\)
  2. \(a_r\)\(a_j(l\leq j\leq r-1,a_j=a_r)\) 一起合并。

第二种转移,我们需要 \(a_j,a_r\) 同一次删除,且区间 \([j+1,r-1]\) 必须在 \(a_j,a_r\) 被删掉之前先删掉,因此答案由区间 \([l,j]\) 和区间 \([j+1,r-1]\) 转移得到,因为我们只要 \(a_j\) 在第 \(k\) 次删除的方案,为了方便,我们将 DP 加一维 \(x\)\(dp_{len,l,k,x}\) 表示区间 \([l,l+len-1]\) 删除 \(k\) 次删完且 \(a_r\) 刚好在第 \(x\) 次被删掉的方案数。

详细 DP 转移过程如下:

转移 \(dp_{len,l,k,x}\) 时,

  1. 初始化 \(dp_{len,l,k=1,x=1}\) 的值(为 \(0\)\(1\)),判断区间 \([l,r]\) 是否能整块一次删掉。

  2. 如果区间 \([l,r-1]\ k-1\) 次删完是合法的,加上 \(dp_{len-1,l,k-1,1\leq x \leq k-1}\) 的答案。

  3. 对于第二种转移方式,若 \(j=r-1\)\(a_r\)\(a_j\) 被删除的那一次可以直接被一起删掉,加上 \(dp_{len-1,l,k,x}\) 的答案。
    否则枚举区间 \(1\)\([j+1,r-1]\) 或区间 \(2\)\([l,j]\) 要删除几次删完。然后就可以算出 \(a_j\) 在删除区间 \([l,j]\) 的步骤中是在第几次被删除的(\(x_1\)),加上答案 \(dp_{len_1,l,k_1,x_1}\times dp_{len_2,l_2,k2}\times calc(x_1,k_2)\)

其中 \(calc(x_1,k_2)=(x_1-1+k_2)!\div ((x_1-1)!\times k_2!)\)。计算区间 \(2\)\(k_2\) 个删除步骤必须都在区间 \(1\) 的第 \(x_1\) 步骤前的方案数。想象为 \(k_2+(x_1-1)\) 个点排序,由于 \(k_2\) 个步骤和 \(x_1-1\) 个步骤的前后顺序分别是一定的,要除去 \(k_2\) 个点和 \(x_1-1\) 个点分别的排列数量。

最后答案为区间 \([1,n]\) 删除任意次删完且 \(a_n\) 在任意次被删掉的方案数。

时间复杂度 \(O(n^6)\),(DP 状态 \(O(n^4)\),转移 \(O(n^2)\)),由于常数很小,不会超时。

code

#include<bits/stdc++.h>
#define sf scanf
#define pf printf
#define il inline
using namespace std;
typedef long long ll;
const int N=51,mod=1e9+7;int n,a[N];
int dp[N][N][N][N];
int f[N][N][N];
int jc[N];
int ny[N];void add(int &a,int b){a=(1ll*a+1ll*b)%mod;
}
int ksm(int a,int b){int sum=1;while(b){if(b&1) sum=1ll*sum*a%mod;a=1ll*a*a%mod;b>>=1;}return sum;
}
int calc(int a,int b,int c){return 1ll*jc[a]*ny[b]%mod*ny[c]%mod;
}int main(){
//	freopen("jade7.in","r",stdin);
//	freopen("jade.out","w",stdout);sf("%d",&n);jc[0]=1;ny[0]=1;for(int i=1;i<=n;i++){jc[i]=1ll*jc[i-1]*i%mod;ny[i]=ksm(jc[i],mod-2);}for(int i=1;i<=n;i++){sf("%d",&a[i]);}for(int len=1;len<=n;len++){for(int l=1,r=l+len-1;r<=n;l++,r++){dp[len][l][1][1]=1;for(int i=l+1;i<=r;i++){if(a[i]!=a[i-1]) {dp[len][l][1][1]=0;break;}}f[len][l][1]=dp[len][l][1][1];for(int k=2;k<=len;k++){for(int x=1;x<=k;x++){if(dp[len-1][l][k-1][k-1]){add(dp[len][l][k][x],f[len-1][l][k-1]);}for(int i=l;i<=r-1;i++){if(a[i]!=a[r]) continue;if(i==r-1){add(dp[len][l][k][x],dp[len-1][l][k][x]);continue;}for(int k2=1;k2<k&&k2<x;k2++){int k1=k-k2,x1=x-k2;add(dp[len][l][k][x],1ll*dp[i-l+1][l][k1][x1]*f[r-1-(i+1)+1][i+1][k2]%mod*calc(x1-1+k2,x1-1,k2)%mod);}}add(f[len][l][k],dp[len][l][k][x]);}}}}int ans=0;for(int i=1;i<=n;i++){add(ans,f[n][1][i]);}pf("%d\n",ans);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/72013.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

计量经济学(六)——时间序列滞后变量模型

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 滞后变量模型(Lagged Variable Models)是一种时间序列分析方法,主要通过引入自变量和因变量的滞后项来解释当前变量的行为。该模型在经济学、金融学中广泛…

Krita配置comfyui,ai绘图 记录

comfyui使用b站up、赛博佛祖秋葉aaaki的整合包。此地址下载ai插件 https://github.com/Acly/krita-ai-diffusion krita中安装下载好的插件,从文件导入python插件 打开ai绘图面板: 缺失节点使用复制链接地址 然后,在复制的地址后加上.git 后使用comfy UI manager通过git URL安…

ABP VNext 系列:框架启动流程以及依赖注入原理和源码分析

简单介绍 ABP VNext Github 地址:https://github.com/abpframework/abp 官网文档地址:https://abp.io/docs/latest 官网:https://abp.io/ABP VNext 框架是一个基于 ASP.NET Core 的完整基础架构,也就是我们现在称的 ABP 框架,它遵循软件开发最佳实践和最新技术来创建现代 …

IDEA如何查看所有的断点(Breakpoints)并关闭

前言 我们在使用IDEA开发Java应用时,基本上都需要进行打断点的操作,这方便我们排查BUG,也方便我们查看设计的是否正确。不过有时候,我们不希望进入断点,这时候除了点击断点关闭外,有没有更快速的方便关闭所有的断点呢? 如何设置 首先,我们在运行debug模式的时候,切换到…

为什么普通AI不够用?定制AI Agents工具是关键!

1 新建一个实时搜索工具 @tool def web_search(query: str):""" 实时搜索工具 """serp = SerpAPIWrapper()result = serp.run(query)print("实时搜索结果:", result)return result# 初始化工具列表 tools = [web_search]# 创建OpenAI工…

Nginx UI:全新的 Nginx 在线管理平台

前言 Nginx在程序部署中扮演着至关重要的角色,其高性能、高安全性、易于配置和管理的特点,使得它成为现代Web应用部署中不可或缺的一部分。今天大姚给大家分享一款实用的 Nginx Web UI 工具,希望能够帮助到有需要的同学。 工具介绍 Nginx UI一个功能丰富、易于使用的 Nginx …

LSTM神经网络结合PSO粒子群优化对管网优化调度及网络安全入侵检测模型|附数据代码

全文链接:https://tecdat.cn/?p=37878 原文出处:拓端数据部落公众号 分析师:Fan Qiao 在当今科技飞速发展的时代,无论是工业生产中的管网系统,还是信息领域的网络安全,都面临着日益复杂的挑战😕。管网系统作为能源输送和分配的关键基础设施,其优化调度对于提高能源利…

【专题】2024年经销商车后用户研究:洞察车主变化制胜售后未来报告合集PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p=37875 在汽车行业快速变革的时代,“互联网原住民”成为车主群体的重要组成部分。2023 - 2024 年,车后用户线上渠道使用比例不断上升,App/小程序备受青睐,各线上渠道各具优势。同时,购车关注点也在不断变化,价格成为关键因素,本土品牌崛…