[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"consumer-news-detail-845":3,"consumer-news-interaction-845":38,"consumer-news-related-845":41},{"detail":4,"item":34},{"card":5,"schemaVersion":21,"fields":22,"content":28},{"id":6,"kind":7,"targetType":8,"targetId":9,"subtype":7,"typeLabel":10,"title":11,"subtitle":12,"summary":13,"coverUrl":14,"badgeText":14,"href":15,"sourceName":12,"meta":16,"metrics":18,"tags":19,"resolved":20},"NEWS_ARTICLE:845","news","NEWS_ARTICLE",845,"资讯","题解：P10027 梦境世界","博客园","题目。 考虑 DP。由于撤销操作会导致环路，所以不能直接 DP。 我们发现对于撤销操作肯定会回到某一个点，也就是存在一个点，走了若干步再撤回再走。这样就好转移了。 定义 \\(G_{i,j,k}\\) 代表从 \\((i,j)\\) 出发，拥有 \\(k\\) 瓶撤销药，到达终点的方案数。 同时，我们定义 \\(","","\u002Fnews\u002F845",[17],"2026",{},[],true,"consumer-content-detail-v1",{"sourceName":12,"authorName":23,"summary":13,"description":13,"publishTime":24,"updateTime":25,"sourceUrl":26,"language":27},"Monotonic_Deque","2026-09-02T10:58","2026-09-02T20:37:48","https:\u002F\u002Fwww.cnblogs.com\u002FDeepSleep0629\u002Fp\u002F22804247","中文",{"format":29,"policy":30,"normalized":20,"html":31,"text":32,"wordCount":33,"hasBody":20},"HTML","NEWS_CONTENT_V1","\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.luogu.com.cn\u002Fproblem\u002FP10027\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">题目\u003C\u002Fa>。\u003C\u002Fp>\n\u003Cp>考虑 DP。由于撤销操作会导致环路，所以不能直接 DP。\u003C\u002Fp>\n\u003Cp>我们发现对于撤销操作肯定会回到某一个点，也就是存在一个点，走了若干步再撤回再走。这样就好转移了。\u003C\u002Fp>\n\u003Cp>定义 \u003Cspan>\\(G_{i,j,k}\\)\u003C\u002Fspan> 代表从 \u003Cspan>\\((i,j)\\)\u003C\u002Fspan> 出发，拥有 \u003Cspan>\\(k\\)\u003C\u002Fspan> 瓶撤销药，到达终点的方案数。\u003C\u002Fp>\n\u003Cp>同时，我们定义 \u003Cspan>\\(F_{i,j,k}\\)\u003C\u002Fspan> 为从 \u003Cspan>\\((i,j)\\)\u003C\u002Fspan> 出发，消耗 \u003Cspan>\\(k\\)\u003C\u002Fspan> 个药，最后返回 \u003Cspan>\\((i,j)\\)\u003C\u002Fspan> 的种类数。\u003C\u002Fp>\n\u003Cp>注意，这里的 \u003Cspan>\\(k\\)\u003C\u002Fspan> 代表循环变量，题目中的 \u003Cspan>\\(k\\)\u003C\u002Fspan> 以 \u003Cspan>\\(K\\)\u003C\u002Fspan> 表示。\u003C\u002Fp>\n\u003Cp>可以发现转移公式就是 \u003Cspan>\\(\\forall x\\in[0,k]\\)\u003C\u002Fspan>，也就是当前节点走出去再回来消耗的药的个数，将 \u003Cspan>\\(F_{i,j,x}\\times(G_{i+1,j,k-x}+G_{i,j+1,k-x})\\)\u003C\u002Fspan> 求和就是 \u003Cspan>\\(G_{i,j,k}\\)\u003C\u002Fspan>。即：\u003C\u002Fp>\n\n\u003Cdiv>\n \\[G_{i,j,k}=\\sum_{x=0}^kF_{i,j,x}\\times(G_{i+1,j,k-x}+G_{i,j+1,k-x}) \\]\n\u003C\u002Fdiv>\n\n\u003Cp>答案就是：\u003C\u002Fp>\n\n\u003Cdiv>\n \\[\\sum_{k=1}^KG_{1,1,k} \\]\n\u003C\u002Fdiv>\n\n\u003Cp>现在考虑计算 \u003Cspan>\\(F_{i,j,k}\\)\u003C\u002Fspan>。很显然，\u003Cspan>\\(F_{i,j,k}\\)\u003C\u002Fspan> 就是往下或往右走 \u003Cspan>\\(1\\)\u003C\u002Fspan> 格再走 \u003Cspan>\\(k-x-1\\)\u003C\u002Fspan> 步之后退回来，然后再在原地走 \u003Cspan>\\(x\\)\u003C\u002Fspan> 步。转移式：\u003C\u002Fp>\n\n\u003Cdiv>\n \\[F_{i,j,k}=\\sum_{x=0}^{k-1}F_{i,j,x}\\times(F_{i+1,j,k-x-1}+F_{i,j+1,k-x-1}) \\]\n\u003C\u002Fdiv>\n\n\u003Cp>转移的注意事项：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>转移 \u003Cspan>\\(G_{i,j,k}\\)\u003C\u002Fspan> 时 \u003Cspan>\\(i,j\\)\u003C\u002Fspan> 要逆序。\u003C\u002Fli>\n \u003Cli>最外层是 \u003Cspan>\\(k\\)\u003C\u002Fspan>。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>时间复杂度：\u003Cspan>\\(\\Theta(nmk^2)\\)\u003C\u002Fspan>，空间复杂度：\u003Cspan>\\(\\Theta(nmk)\\)\u003C\u002Fspan>。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>#include &lt;bits\u002Fstdc++.h&gt;\n#define For(i, l, r) for(int i = l, i##QWQ = r; i &lt;= i##QWQ; i++)\n#define Rev(i, l, r) for(int i = l, i##QWQ = r; i &gt;= i##QWQ; i--)\nusing namespace std;\nconst int N = 105;\nint F[N][N][N], G[N][N][N], mp[N][N];\nint main() {\n    cin.tie(0)-&gt;sync_with_stdio(0);\n    int n, m, K, p, s, ans = 0; cin &gt;&gt; n &gt;&gt; m &gt;&gt; K &gt;&gt; p &gt;&gt; s;\n    for(int x, y; s-- &amp;&amp; cin &gt;&gt; x &gt;&gt; y;) mp[x][y] = 1;\n    For(i, 1, n) For(j, 1, m) if(!mp[i][j]) F[i][j][0] = 1;\n    For(k, 1, K) For(i, 1, n) For(j, 1, m) if(!mp[i][j]) For(x, 0, k - 1)\n        F[i][j][k] = (F[i][j][k] + 1ll * F[i][j][x] * (F[i + 1][j][k - x - 1] + F[i][j + 1][k - x - 1]) % p) % p;\n    G[n][m][0] = 1;\n    For(k, 0, K) Rev(i, n, 1) Rev(j, m, 1) if(!mp[i][j]) For(x, 0, k)\u002F\u002Fi,j逆序\n        G[i][j][k] = (G[i][j][k] + 1ll * F[i][j][x] * (G[i + 1][j][k - x] + G[i][j + 1][k - x]) % p) % p;\n    For(k, 0, K) ans = (ans + G[1][1][k]) % p;\n    cout &lt;&lt; ans &lt;&lt; \"\\n\";\n    return 0;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>","题目。 考虑 DP。由于撤销操作会导致环路，所以不能直接 DP。 我们发现对于撤销操作肯定会回到某一个点，也就是存在一个点，走了若干步再撤回再走。这样就好转移了。 定义 \\(G_{i,j,k}\\) 代表从 \\((i,j)\\) 出发，拥有 \\(k\\) 瓶撤销药，到达终点的方案数。 同时，我们定义 \\(F_{i,j,k}\\) 为从 \\((i,j)\\) 出发，消耗 \\(k\\) 个药，最后返回 \\((i,j)\\) 的种类数。 注意，这里的 \\(k\\) 代表循环变量，题目中的 \\(k\\) 以 \\(K\\) 表示。 可以发现转移公式就是 \\(\\forall x\\in[0,k]\\)，也就是当前节点走出去再回来消耗的药的个数，将 \\(F_{i,j,x}\\times(G_{i+1,j,k-x}+G_{i,j+1,k-x})\\) 求和就是 \\(G_{i,j,k}\\)。即： \\[G_{i,j,k}=\\sum_{x=0}^kF_{i,j,x}\\times(G_{i+1,j,k-x}+G_{i,j+1,k-x}) \\] 答案就是： \\[\\sum_{k=1}^KG_{1,1,k} \\] 现在考虑计算 \\(F_{i,j,k}\\)。很显然，\\(F_{i,j,k}\\) 就是往下或往右走 \\(1\\) 格再走 \\(k-x-1\\) 步之后退回来，然后再在原地走 \\(x\\) 步。转移式： \\[F_{i,j,k}=\\sum_{x=0}^{k-1}F_{i,j,x}\\times(F_{i+1,j,k-x-1}+F_{i,j+1,k-x-1}) \\] 转移的注意事项： 转移 \\(G_{i,j,k}\\) 时 \\(i,j\\) 要逆序。 最外层是 \\(k\\)。 时间复杂度：\\(\\Theta(nmk^2)\\)，空间复杂度：\\(\\Theta(nmk)\\)。 #include \u003Cbits\u002Fstdc++.h> #define For(i, l, r) for(int i = l, i##QWQ = r; i \u003C= i##QWQ; i++) #define Rev(i, l, r) for(int i = l, i##QWQ = r; i >= i##QWQ; i--) using namespace std; const int N = 105; int F[N][N][N], G[N][N][N], mp[N][N]; int main() { cin.tie(0)->sync_with_stdio(0); int n, m, K, p, s, ans = 0; cin >> n >> m >> K >> p >> s; for(int x, y; s-- && cin >> x >> y;) mp[x][y] = 1; For(i, 1, n) For(j, 1, m) if(!mp[i][j]) F[i][j][0] = 1; For(k, 1, K) For(i, 1, n) For(j, 1, m) if(!mp[i][j]) For(x, 0, k - 1) F[i][j][k] = (F[i][j][k] + 1ll * F[i][j][x] * (F[i + 1][j][k - x - 1] + F[i][j + 1][k - x - 1]) % p) % p; G[n][m][0] = 1; For(k, 0, K) Rev(i, n, 1) Rev(j, m, 1) if(!mp[i][j]) For(x, 0, k)\u002F\u002Fi,j逆序 G[i][j][k] = (G[i][j][k] + 1ll * F[i][j][x] * (G[i + 1][j][k - x] + G[i][j + 1][k - x]) % p) % p; For(k, 0, K) ans = (ans + G[1][1][k]) % p; cout \u003C\u003C ans \u003C\u003C \"\\n\"; return 0; }",1397,{"id":6,"kind":7,"title":11,"summary":13,"image":14,"href":15,"meta":17,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":37},"#2563eb","16 \u002F 10",[7,8],{"targetType":8,"targetId":9,"likedByMe":39,"likeCount":40,"commentCount":40,"contentLikeCount":40,"contentCommentCount":40,"sourceLikeCount":40,"sourceCommentCount":40},false,0,[42,51,57,64,72,79,85,92],{"id":43,"kind":7,"title":44,"summary":45,"image":46,"href":47,"meta":48,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":49},"NEWS_ARTICLE:827","MHS 三部曲（下）：谁允许 AI 行动？——权力、合规与中国厂商的答卷","我们总在等待一个像 ChatGPT 那样的机器人时刻。但具身智能真正的拐点，也许先发生在更不起眼的地方：一台陌生设备，第一次能把自己的能力、状态和边界完整告诉 AI；一个 Agent，第一次能把试出来的经验固化成可验证、可复用的机器技能。","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F510\u002F202608\u002F510-20260830153745229-1536981088.jpg","\u002Fnews\u002F827","2026 · 人工智能",[50],"人工智能",{"id":52,"kind":7,"title":53,"summary":54,"image":14,"href":55,"meta":17,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":56},"NEWS_ARTICLE:829","我不会美工，用 WorkBuddy 1 分钟做出 4 张海报","先说结果：下面这 4 张海报，从我发出指令到拿到图片，大约 1 分钟。 我不会美工，也没有打开 Photoshop。用的工具，是我之前用 WorkBuddy 做的一个海报生成器。这个生成器本身也没花几分钟，具体开发过程我在上一篇文章里写过。 这次我把海报生成器的网址、产品截图和要求一起发给 Work","\u002Fnews\u002F829",[7,8],{"id":58,"kind":7,"title":59,"summary":60,"image":61,"href":62,"meta":17,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":63},"NEWS_ARTICLE:828","一个人抵一个团队的时代，企业级 AI Agent 还需要做什么？","对于企业而言，真正需要的，不是一个“会聊天”的 Agent，而是一套能被多用户、多场景复用，且权限清晰、过程可审计、成本可控制的 Agent 能力体系。","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F2232255\u002F202609\u002F2232255-20260902173524728-659996478.png","\u002Fnews\u002F828",[7,8],{"id":65,"kind":7,"title":66,"summary":67,"image":14,"href":68,"meta":69,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":70},"NEWS_ARTICLE:832","用 runtime-async 写一个支持 async\u002Fawait 的轻量脚本引擎","起因：一个好奇 事情的开头很简单。 给 .NET 做过动态脚本的人大概都碰到过同一堵墙：表达式树也好、Reflection.Emit 也好，都很难支持 async\u002Fawait。原因不在语法，而在 await 的实现方式——C# 编译器要为每个 async 方法生成一个状态机结构体，把方法体切成若干片","\u002Fnews\u002F832","2026 · 软件开发",[71],"软件开发",{"id":73,"kind":7,"title":74,"summary":75,"image":76,"href":77,"meta":17,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":78},"NEWS_ARTICLE:831","Agent Sandbox 规模化：JuiceFS 探索与实践","过去一段时间，我们在和云厂商以及 Agent 团队推进 Sandbox 落地时，除了要解决数据如何进入 Sandbox，还需要考虑任务所需的数据和执行过程中产生的数据，如何跨任务、跨阶段持续使用。Sandbox 可以随任务快速创建和销毁，但数据往往需要继续保留、共享和流转。 当 Sandbox 并发","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F2544292\u002F202609\u002F2544292-20260902171045357-1907499098.png","\u002Fnews\u002F831",[7,8],{"id":80,"kind":7,"title":81,"summary":82,"image":14,"href":83,"meta":17,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":84},"NEWS_ARTICLE:830","百智云长期记忆服务：长期记忆与上下文窗口的区别","很多人在接触 AI 长期记忆时，第一反应是：「这不就是把聊天记录存起来吗？」其实这是一个很常见的误解。今天我们把「长期记忆」和「上下文窗口」这两个概念彻底讲清楚。 一、什么是上下文窗口 上下文窗口（Context Window）是模型在单次推理时能「看到」的文本上限。它像一个临时的工作台：模型只能处","\u002Fnews\u002F830",[7,8],{"id":86,"kind":7,"title":87,"summary":88,"image":89,"href":90,"meta":48,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":91},"NEWS_ARTICLE:835","体验向量数据库 qdrant","作者:张富春(ahfuzhang)，转载时请注明作者和引用链接，谢谢！ cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 背景 为了早点搞懂公司的百万行 C# 的祖传代码，我想在缺乏文档、缺乏帮手的情况下，先建立一个 企业知识库 来快速帮我理清头绪。 一开始，我是打算以 weav","https:\u002F\u002Fimg2022.cnblogs.com\u002Fblog\u002F1457949\u002F202202\u002F1457949-20220216153819145-1193738712.png","\u002Fnews\u002F835",[50],{"id":93,"kind":7,"title":94,"summary":95,"image":14,"href":96,"meta":17,"badge":10,"author":12,"stats":-1,"accent":35,"coverRatio":36,"tags":97},"NEWS_ARTICLE:833","如何利用AI技术实现漫画翻译","漫画作为图文结合的特色文化载体，承载着各国潮流文化与人文故事，但跨语言的文字壁垒，长期制约着漫画的传播与交流。传统漫画翻译高度依赖人工操作，需要人工框选文字、擦除原图文字、翻译文案、排版适配画风，流程繁琐、耗时费力，且极易出现排版错乱、画风违和、语义偏差等问题。 随着深度学习、计算机视觉与大模型技术","\u002Fnews\u002F833",[7,8]]