打家劫舍II
原题在这里:
概述题意:给定数组中,求不相邻最大取值和(首尾也相邻)
我动态规划真的不太行
写了个dfs,TLE

class Solution { vector<int> num, vis; int n, ans; void dfs(int x, int y) //下标为x { if (vis[(x - 1 + n) % n] || vis[(x + 1) % n]) //必须左邻和右邻未访问 return; vis[x] = 1; cout << "考虑=" << y << endl; ans = max(ans, y); for (int i = x + 2; i < n; ++i) if (!vis[i]) dfs(i, y + num[i]); vis[x] = 0; } public: int rob(vector<int> &nums) { num = nums, n = nums.size(); vis = vector<int>(n, 0); dfs(0, num[0]); if (n > 1) dfs(1, num[1]); if (n > 2) dfs(2, num[2]); return ans; } };
还得是动态规划才行:
我都想到了分两段[0,size-1]和[1,size]去遍历,但是就是想不到转移方程,瞎写
class Solution { vector<int> num; int range(int l, int r) { int x = 0, y = 0;//当前i和前置i for (int i = l; i < r; ++i) { int z = x;//计算i, 预存pre x = max(num[i] + y, z); y = z; } return x; } public: int rob(vector<int> &nums) { if (nums.size() == 1) return nums[0]; num=nums; return max(range(0, nums.size() - 1), range(1, nums.size())); } };
【Over】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!