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

leetcode 2977(Dijkstra + DP)

2977: 转换字符串的最小成本Ⅱ

思路:动态规划 + 图最短路径

  • 不相交性质:转换操作的子串要么完全相同,要么不相交。这意味着每个位置只需考虑直接转换到最终状态,无需考虑中间转换步骤。

  • 子串独立性:可以将问题分解为:将source的前i个字符变为target的前i个字符的最小代价。

class Solution { public: long long minimumCost(string source, string target, vector<string>& original, vector<string>& changed, vector<int>& cost) { int n=source.size(); set<int> lens; for(const auto& str:original) lens.insert(static_cast<int>(str.size())); unordered_set<string> orig(original.begin(),original.end()); unordered_set<string> chan(changed.begin(),changed.end()); //初始化dp vector<long long> dp(n+1,LONG_LONG_MAX); dp[0]=0; //构建图 unordered_map<string,vector<pair<string,int>>> graph; for(int i=0;i<original.size();i++){ graph[original[i]].emplace_back(changed[i],cost[i]); } //dijkstra单源最短路径 auto dijkstra=[&graph, &changed](string& src){ unordered_set<string> visited; unordered_map<string,long long> dist; for(const auto& dest:changed){ dist[dest]=LONG_LONG_MAX; } dist[src]=0; for(int i=0;i<changed.size();i++){ auto min_dist=LONG_LONG_MAX; string min_dest; for(const auto& [dest,dist]:dist){ if(!visited.contains(dest) && dist<min_dist){ min_dist=dist; min_dest=dest; } } if(min_dist==LONG_LONG_MAX) return dist; visited.insert(min_dest); dist[min_dest]=min_dist; for(const auto& [neighbour,weight]:graph[min_dest]){ if(!visited.contains(neighbour) && min_dist+weight<dist[neighbour]){ dist[neighbour]=min_dist+weight; } } } return dist; }; unordered_map<string,unordered_map<string,long long>> dist; for(int i=1;i<=n;i++){ int j=0; while(j<*lens.rbegin() && i-j-1>=0 && source[i-j-1]==target[i-j-1]){ dp[i]=min(dp[i],dp[i-j-1]); j++; } if(j==*lens.rbegin()) continue; //逐个尝试替换不同长度的子串 for(auto begin=lens.upper_bound(j);begin!=lens.end() && *begin<=i;begin++){ auto len=*begin; auto src=source.substr(i-len,len); auto dest=target.substr(i-len,len); if(src!=dest && orig.contains(src) && chan.contains(dest) && dp[i-len]!=LONG_LONG_MAX){ if(!dist.contains(src)) dist[src]=dijkstra(src); if(dist[src][dest]!=LONG_LONG_MAX){ dp[i]=min(dp[i],dp[i-len]+dist[src][dest]); } } } } return dp[n]==LONG_LONG_MAX ? -1:dp[n]; } };
http://www.jsqmd.com/news/325154/

相关文章:

  • 导师推荐8个AI论文网站,继续教育学生轻松搞定毕业论文!
  • Qwen-Turbo-BF16效果展示:浮空城堡+霓虹雨街+汉服女神三组1024px高清原图
  • 读数字时代的网络风险管理:策略、计划与执行04风险指引体系
  • word无法创建工作文件,请检查临时环境变量_如何设置win11的环境变量
  • 解读送风风机品牌厂家,合肥新中鑫亮点多
  • GLM-4-9B-Chat-1M惊艳效果:多轮对话中持续引用百页PDF内容不丢失
  • 苏州牙周治疗哪家强?2025最新排行榜权威推荐!牙齿缺口修复/单颗牙齿种植/老年人牙齿种植,牙周治疗品牌选哪家
  • 从“Claude十分钟开发”到我的真实体验:为什么Weelinking成了我的救星?
  • 2026年比较好的高端工装定制/工装定制TOP品牌厂家排行榜
  • 学霸同款2026 9款一键生成论文工具测评:专科生毕业论文必备清单
  • 株洲百度账户托管服务费用多少,靠谱公司排名出炉
  • 2026年变压器资深厂商推荐,雄县鸿德电气设备满足多样用电需求
  • 2026年安徽直流送风风机服务商推荐,个性化定制超贴心
  • 聊聊靠谱的变压器供应商,京津冀地区正规厂商的性价比分析
  • 探讨立式外圆磨床厂家怎么选,性价比高的推荐
  • 2026年DeepSeek写的论文AI率太高?这3款降AI工具亲测有效
  • 工程招标合规争议解决律师怎么选,刘营律师靠不靠谱?
  • 无心磨床厂家哪家口碑好,无锡机床股份有限公司值得选吗
  • 2026年工程招标合规性争议处理律师排行榜,前十名揭晓
  • 基于Android的课堂签到App的设计与实现)开题报告
  • 建丰有机肥生产线研发能力强吗?精选品牌推荐
  • 2026年电泳漆优质供应商,飞扬环保科技实力凸显
  • 基于Android系统的个人记账备忘录的设计与实现论文
  • 1.31
  • 2026年比较好的角磨机切割片/可弯曲弹性磨切割片厂家推荐及采购参考
  • 2026正规BFDR玄武岩纤维双层增强复合管厂家推荐榜单
  • 2026年知网AIGC检测不通过?这3款降AI工具专治高AI率
  • 上海DWBFRP双波玄塑结构壁管厂家怎么选?2026年最新选择指南
  • 2026年评价高的液压浴室夹/二段力液压浴室夹厂家最新实力排行
  • -基于JavaEE技术的电信业务信息管理系统设计与实现-任务书