ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 225|回复: 4

[求助] 硬着头皮,又做了一道 递归题。思路有,但没经验。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-11-13 15:29 | 显示全部楼层 |阅读模式
本帖最后由 cnmlgb9998 于 2024-11-13 15:39 编辑

请大神 多多指点。如何 剪枝?减少冗余。
  1. let
  2.       源 = Excel.CurrentWorkbook(),
  3.       Data = 源{[Name = "表5"]}[Content],
  4.       Filter = 源{[Name = "表6"]}[Content],
  5.       fx = (x, y) =>
  6.             [
  7.                   a = Table.SelectRows(Data, each [始发站] = x[出发]),
  8.                   b =
  9.                         if Table.IsEmpty(a) then
  10.                               y
  11.                         else
  12.                               List.Combine(
  13.                                     List.Transform(
  14.                                           Table.ToRecords(a),
  15.                                           each
  16.                                                 if [终点站] = x[目的] then
  17.                                                       y & {{[终点站], [价格]}}
  18.                                                 else
  19.                                                       @fx(
  20.                                                             Record.TransformFields(
  21.                                                                   x,
  22.                                                                   {{"出发", (z) => [终点站]}}
  23.                                                             ),
  24.                                                             y & {{[终点站], [价格]}}
  25.                                                       )
  26.                                     )
  27.                               )
  28.             ][b],
  29.       Tab = List.Transform(Table.ToRecords(Filter), each Table.FromRows(fx(_, {{[出发], 0}}))),
  30.       Group = Table.Group(Tab{0}, "Column1", {"D", each _}, 0, (x, y) => Number.From(y = Filter[出发]{0})),
  31.       Sele = List.Select(
  32.             Group[D],
  33.             each List.ContainsAll([Column1], List.Skip(Table.ToRows(Filter){0}))
  34.       ),
  35.       Sele2 = [
  36.             a = List.Min(List.Transform(Sele, each List.Sum([Column2]))),
  37.             b = List.Select(Sele, each List.Sum([Column2]) = a)
  38.       ][b],
  39.       Res1 = Sele2{0},
  40.       Chang = Text.Combine(
  41.             List.Accumulate(
  42.                   {1 .. Table.RowCount(Res1) - 1},
  43.                   {},
  44.                   (x, y) =>
  45.                         x
  46.                               & {
  47.                                     Text.Format(
  48.                                           "#{0}>>#{1},¥#{2}",
  49.                                           {
  50.                                                 Text.From(Res1[Column1]{y - 1}),
  51.                                                 Text.From(Res1[Column1]{y}),
  52.                                                 Text.From(Res1[Column2]{y})
  53.                                           }
  54.                                     )
  55.                               }
  56.             ),
  57.             " | "
  58.       )
  59.             & " | 合计:"
  60.             & Text.From(List.Sum(Res1[Column2])),
  61.       Res2 = #table(1, {{Chang}})
  62. in
  63.       Res2
复制代码


捕获.JPG
捕获2.JPG

2024-08-19练习题:K 站中转内最便宜的航班.rar

36.41 KB, 下载次数: 2

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-13 16:01 | 显示全部楼层
这题,我是自降难度。行程只能单向。请注意。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-13 17:35 | 显示全部楼层
代码更新了一下。
  1. let
  2.       源 = Excel.CurrentWorkbook(),
  3.       Data = 源{[Name = "表5"]}[Content],
  4.       Filter = 源{[Name = "表6"]}[Content],
  5.       fx = (x, y) =>
  6.             [
  7.                   a = Table.SelectRows(Data, each [始发站] = x[出发]),
  8.                   b =
  9.                         if Table.IsEmpty(a) then
  10.                               {y}
  11.                         else
  12.                               List.Combine(
  13.                                     List.Transform(
  14.                                           Table.ToRecords(a),
  15.                                           each
  16.                                                 if [终点站] = x[目的] then
  17.                                                       {y & {{[终点站], [价格]}}}
  18.                                                 else
  19.                                                       @fx(
  20.                                                             Record.TransformFields(
  21.                                                                   x,
  22.                                                                   {{"出发", (z) => [终点站]}}
  23.                                                             ),
  24.                                                             y & {{[终点站], [价格]}}
  25.                                                       )
  26.                                     )
  27.                               )
  28.             ][b],
  29.       Tab = List.Combine(List.Transform(Table.ToRecords(Filter), each fx(_, {{[出发], 0}}))),
  30.       Sele = List.Select(
  31.             Tab,
  32.             each List.ContainsAll(List.Zip(_){0}, List.LastN(Table.ToRows(Filter){0}, 2))
  33.       ),
  34.       Min = List.Min(List.Transform(Sele, each List.Sum(List.Zip(_){1}))),
  35.       Sele2 = List.Combine(List.Select(Sele, each List.Sum(List.Zip(_){1}) = Min)),
  36.       Res = Text.Combine(
  37.             List.Accumulate(
  38.                   {1 .. List.Count(Sele2) - 1},
  39.                   {},
  40.                   (x, y) =>
  41.                         x
  42.                               & {
  43.                                     Text.Format(
  44.                                           "#{0}>>#{1},¥#{2}",
  45.                                           {
  46.                                                 Text.From(Sele2{y - 1}{0}),
  47.                                                 Text.From(Sele2{y}{0}),
  48.                                                 Text.From(Sele2{y}{1})
  49.                                           }
  50.                                     )
  51.                               }
  52.             ),
  53.             " | "
  54.       )
  55.             & " | 合计:"
  56.             & Text.From(Min),
  57.       转换为表 = #table(1, {{Res}})
  58. in
  59.       转换为表
复制代码

TA的精华主题

TA的得分主题

发表于 2024-11-15 13:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
PQ参考解法(与Leecode原题,增加往返同价,城市从1开始而已,基本照搬),推荐dp动态规划或BellmanFord算法求
微信截图_20241115133501.png

PQ求K站中转内最便宜的航班问题.zip

21.18 KB, 下载次数: 0

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-15 13:57 | 显示全部楼层
deadzlq 发表于 2024-11-15 13:39
PQ参考解法(与Leecode原题,增加往返同价,城市从1开始而已,基本照搬),推荐dp动态规划或BellmanFord算法求

纯个人兴趣,做着好玩。不敢深究。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-25 16:06 , Processed in 0.047053 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表