news 2026/5/1 8:36:16

状压dp|dfs|dijk

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
状压dp|dfs|dijk

lc2816

优雅递归😋

class Solution {
public:
int t=0;
ListNode* doubleIt(ListNode* head)
{
auto dfs=[&](this auto&& dfs,ListNode* node)->ListNode*
{
if(!node) return nullptr;
dfs(node->next);


//先递归到结尾
//handle
int v=node->val;
node->val=v*2%10+t;
t=v*2/10;
return node;
};
dfs(head);
if(t)
return new ListNode(1,head);
return head;
}
};

lc2486

暴力dfs

DFS找从起点到终点的最小掉血路径

记下来最少掉多少血

若这个数比初始健康值小且能走到终点,就返回true

必然 充分的地推验证过程 实现剪枝

class Solution {
public:
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};

bool findSafeWalk(vector<vector<int>>& g, int h) {
int m=g.size(),n=g[0].size();
vector<vector<int>> mem(m, vector<int>(n, INT_MAX));

auto dfs = [&](this auto&& dfs, int x, int y, int c){
if(x<0||x>=m||y<0||y>=n||c>=mem[x][y]) return;
mem[x][y] = c;
if(x==m-1&&y==n-1) return;
for(int k=0;k<4;k++){
int a=x+dx[k],b=y+dy[k];
dfs(a,b,c + (a>=0&&a<m&&b>=0&&b<n?g[a][b]:0));
}
};

dfs(0,0,g[0][0]);
return mem[m-1][n-1] < h && mem[m-1][n-1] != INT_MAX;
}
};

dijk优化

对于"大的同时小一点"

大的加给小的,返回当前大的

lc1723

预处理 抽象出jobs子集枚举 状态 +状压dp

二进制表示任务组合,先算所有组合的总耗时,再用动态规划分k个工人:

每个工人分配部分任务,取“当前工人任务耗时”和“之前工人最大耗时”的较大值

最终找k个工人干完所有任务的最小最大耗时

class Solution {

public:
int minimumTimeRequired(vector<int>& jobs, int k)

{
int n = jobs.size();
vector<int> tot(1 << n, 0);
for (int i = 1; i < (1 << n); i++) {
for (int j = 0; j < n; j++) {
if ((i & (1 << j)) == 0) continue;
int left = (i - (1 << j));
tot[i] = tot[left] + jobs[j];
break;
}
}

vector<vector<int>> dp(k, vector<int>(1 << n, -1));
for (int i = 0; i < (1 << n); i++)
dp[0][i] = tot[i];

for (int j = 1; j < k; j++) {
for (int i = 0; i < (1 << n); i++) {
int minv = INT_MAX;
for (int s = i; s; s = (s - 1) & i)

{

// 枚举 i 的全部子集
int left = i - s;
int val = max(dp[j-1][left], tot[s]);
minv = min(minv, val);
}
dp[j][i] = minv;
}
}
returndp[k-1][(1<<n)-1];
}
};

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 12:38:58

手动插入和删除堆元素(不使用优先队列)

1. 堆的基本原理 堆是一棵完全二叉树。 大根堆&#xff1a;任意节点的值 $\ge$ 其子节点的值&#xff08;堆顶最大&#xff09;。 小根堆&#xff1a;任意节点的值 $\le$ 其子节点的值&#xff08;堆顶最小&#xff09;。 存储方式 我们使用一个数组 heap[] 来存储堆&…

作者头像 李华
网站建设 2026/4/24 9:59:31

PySpark实战 - 2.4 利用Spark SQL实现分组排行榜

文章目录1. 实战概述2. 实战步骤3. 实战总结1. 实战概述 本次实战基于 Spark SQL 对学生成绩数据进行分组 Top3 排行统计。通过读取 HDFS 上的成绩文件&#xff0c;解析姓名与分数&#xff0c;利用窗口函数 ROW_NUMBER() 按学生分组并降序排序&#xff0c;筛选出每人最高三次成…

作者头像 李华
网站建设 2026/4/24 4:20:09

业界人士质疑汽车销量造假,经销商已开始拒绝压库,谁在裸泳?

11月份不少车企公布了可观的销量&#xff0c;然而11月份国内汽车市场零售量却下滑了8.1%&#xff0c;环比也下滑了1.1%&#xff0c;如此情况下很难相信有那么多的车企仍然取得销量的增长&#xff0c;以至于有业界人士指出可能存在销量造假的情况。更为让人吃惊的数据则是12月第…

作者头像 李华
网站建设 2026/4/22 12:46:56

Linly-Talker语音克隆功能详解:3分钟复制你的声音

Linly-Talker语音克隆功能详解&#xff1a;3分钟复制你的声音 在短视频、直播和智能客服泛滥的今天&#xff0c;千篇一律的“机器人音”早已让用户审美疲劳。人们渴望的是有温度的声音——熟悉、亲切、带着个人印记。如果能让数字人用你自己的声音说话&#xff0c;会怎样&#…

作者头像 李华
网站建设 2026/5/1 8:03:11

Linly-Talker支持CUDA核心监控,实时掌握GPU利用率

Linly-Talker支持CUDA核心监控&#xff0c;实时掌握GPU利用率 在生成式AI与数字人技术快速落地的今天&#xff0c;一个看似流畅的虚拟主播背后&#xff0c;往往隐藏着复杂的多模态推理流水线。从语音识别、大模型对话生成&#xff0c;到语音合成和面部动画驱动&#xff0c;每一…

作者头像 李华
网站建设 2026/5/1 8:03:17

用Linly-Talker生成法律条款解读视频?普法教育新形式

用Linly-Talker生成法律条款解读视频&#xff1f;普法教育新形式 在政务服务大厅的角落里&#xff0c;一位老人站在一台触摸屏前&#xff0c;略显犹豫地开口&#xff1a;“我想问问&#xff0c;单位不给我签劳动合同&#xff0c;能要赔偿吗&#xff1f;”话音刚落&#xff0c;屏…

作者头像 李华