当前位置: 首页 > news >正文

洛谷 P14235 [COI 2011] 卡车 / KAMION 题解

Solution

考虑将一个操作序列看成带空格括号串,其中类型为 \(1,2,3\) 的边分别对应左括号、右括号和空格。

先约定大写字母 \(\texttt{S,T,\dots}\) 指代不同的合法带空格括号串。

不难发现,最后的序列大致长成 \(\texttt{\color{red}\_(\color{green}(\_(())\_(\_))\color{red}\_(((\color{green}()\color{red}(\color{green}()\color{red}\_\_(\color{none}\dots}\),可以看成若干个形如 \(\texttt{\color{green}(S)}\) 的串插入 \(\texttt{\color{red}(}\)\(\texttt{\color{red}\_}\) 形成的。

于是想到区间 DP。加上题目的距离限制,设出如下状态。

  1. \(f_{i,j,k}\)\(i\to j\),路径长度为 \(k\) 且操作序列形如 \(\texttt{(S)}\) 的路径数。
  2. \(g_{i,j,k}\)\(i\to j\),路径长度为 \(k\) 且操作序列形如 \(\texttt{\_(S)\_(T)\_\_\dots}\)(若干个 \(\texttt{(S)}\) 插入空格)的路径数。
  3. \(h_{i,k}\)\(i\to n\),路径长度为 \(k\) 的合法路径数。

最终答案即为 \(\sum_{i=1}^kh_{1,k}\)

然后考虑状态转移。

  1. \(f\):由一对括号夹 \(g\) 转移。
  2. \(g\):由空格或 \(f\) 拼上另一个 \(g\) 转移。
  3. \(h\):由空格、左括号或 \(f\) 拼上另一个 \(h\) 转移。

不难发现转移过程中序列长度 \(k\) 严格递增。因此最外层循环需要从小到大枚举 \(k\)

若将 \(n,k\) 视为同阶则时间复杂度为 \(O(n^5)\),可以通过。

Code

#include <bits/stdc++.h>
#define rept(i,a,b) for(int i(a);i<=b;++i)
#define eb emplace_back
using namespace std;
constexpr int N=51,M=51,P=10007;
struct Edge{Edge(int _v=0,char _w=0):v(_v),w(_w){}int v;char w;
};
int n,m,len,ans;
int f[N][N][N],g[N][N][N],h[N][N];
vector<Edge> G[N],H[N];  // G为原图,H为反图
string s;
signed main(){cin.tie(0)->sync_with_stdio(0);cin>>n>>m>>len;getline(cin,s);rept(i,1,n) g[i][i][0]=1;while(m--){int u,v;char w;getline(cin,s);istringstream line(s);line>>u>>v;if(!(line>>w)) w=0,++g[u][v][1];G[u].eb(v,w);H[v].eb(u,w);}rept(k,2,len){rept(i,1,n){rept(j,1,n){// 计算f[i][j][k]for(auto [v1,w1]:G[i]){  // 一对括号夹gif(isupper(w1)){for(auto [v2,w2]:H[j]){if(w2-w1=='a'-'A'){(f[i][j][k]+=g[v1][v2][k-2])%=P;}}}}// 计算g[i][j][k]for(auto [v1,w1]:G[i]){  // 空格+另一个gif(!w1) (g[i][j][k]+=g[v1][j][k-1])%=P;}rept(u,1,n){  // f+另一个grept(t,2,k){(g[i][j][k]+=f[i][u][t]*g[u][j][k-t])%=P;}}}}}h[n][0]=1;rept(k,1,len){rept(i,1,n){// 计算h[i][k]for(auto [v,w]:G[i]){  // 空格/左括号+另一个hif(!w||isupper(w)){(h[i][k]+=h[v][k-1])%=P;}}rept(u,1,n){  // f+另一个hrept(t,2,k){(h[i][k]+=f[i][u][t]*h[u][k-t])%=P;}}}(ans+=h[1][k])%=P;}cout<<ans;return 0;
}
http://www.jsqmd.com/news/293819/

相关文章:

  • Ubuntu 安装 Redis 并配置密码
  • 2026年智能学习机品牌推荐:AI教育趋势评测,涵盖K12全阶段与家长管控核心痛点
  • 2026年智能学习机品牌推荐:基于多维度实测评价,针对护眼与适配性痛点精准指南
  • 如何为不同学龄选学习机?2026年智能学习机品牌全面评测与推荐,直击内容与护眼痛点
  • 论文阅读:NAACL 2025 LLM Safety for Children
  • 互联网大厂Java求职面试实战:Spring Boot、微服务与Redis缓存技术解析
  • Qwen3-TTS开源
  • Vue 中的 keep-alive 组件
  • 2026年教育资源好的学习机品牌推荐:基于多学段实测评价,针对内容质量与个性化痛点精准指南
  • 2026年教育资源好的学习机品牌推荐:基于多场景实测评价,针对个性化与效率痛点精准指南
  • 2025年动力刀塔工厂排行榜:周边优质汽配供应商盘点,插补Y/双主轴/Y轴/36排刀机/尾顶机/数控车床/刀塔车床/车铣复合刀塔采购哪家好
  • 讲讲南通有实力的私立学校,诺德学校怎么选择?
  • 2026年热门GEO厂家排名:分享南方网通是否为GEO源头工厂的真相
  • 2026年北京不错的室内设计品牌企业排名Top10,时见空间设计在列
  • 2026年广州GEO优化公司排名,探讨服务不错的GEO优化品牌企业怎么选择?
  • 2026年教育资源好的学习机品牌推荐:基于多学段实测评价,针对资源质量与更新痛点指南
  • 2026年国际快递搬家行李寄美国,哪家公司靠谱又省钱?
  • 2026年适合初中生的学习机品牌推荐:智慧教育趋势评测,涵盖专项突破与减负核心场景
  • 深聊口碑好的酸奶生产线厂家,上望机械制造有何亮点?
  • 深入解析:机器学习算法之决策树
  • 2026年教育资源好的学习机品牌推荐:智慧教育趋势评测,涵盖K12全阶段学习资源痛点
  • 2026年适合初中生的学习机品牌推荐:智能化趋势评测,涵盖专项突破与作业辅导核心场景
  • 2026年1月工程管理系统推荐排行榜单深度对比评测:聚焦中小企业数字化实践。
  • 2026年适合初中生的学习机品牌推荐:针对初中生学习痛点横向评价,涵盖学科突破与习惯养成场景
  • 2026年适合初中生的学习机品牌推荐:长期稳定性评估与推荐,直击初中课业繁重核心痛点
  • 联想拯救者 R9000P 模式(Fn+Q 一键切换)
  • 初中学习机哪个品牌更专业?2026年学习机品牌推荐与排名,针对理科思维与英语口语痛点解析
  • 如何为初中生挑选高效学习机?2026年学习机品牌推荐与评测,解决学科难点与哑巴英语痛点
  • 分析粮食钢板仓成型设备,华阳压瓦机性价比在行业排名咋样?
  • 成都万通未来高级技工学校性价比高的专业,该如何选择?