375_猜数字大小(II)_2021.11.12
我们正在玩一个猜数游戏,游戏规则如下:
我从 1 到 n 之间选择一个数字。
你来猜我选了哪个数字。
如果你猜到正确的数字,就会 赢得游戏 。
如果你猜错了,那么我会告诉你,我选的数字比你的 更大或者更小 ,并且你需要继续猜数。
每当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。如果你花光了钱,就会 输掉游戏 。
给你一个特定的数字 n ,返回能够 确保你获胜 的最小现金数,不管我选择那个数字 。
今天室友提供了二分法的思路,在他之上我设计了一下二分法,结果发现最优解用二分法解不出来,所以最终参考题解学习了一波动态规划,但是看动态规划我也没太看懂,有懂的小伙伴留言一起讨论:
1 class Solution { 2 public: 3 int getMoneyAmount(int n) { 4 if(n==1) 5 return 0; 6 //定义矩阵 7 int dp[n+1][n+1]; 8 //初始化“\” 9 for(int i=0;i<=n;i++){ 10 for(int j=0;j<=n;j++){ 11 dp[i][j]=INT_MAX; 12 } 13 } 14 //定义基础值dp[i][i] 15 for(int i=0;i<=n;i++){ 16 dp[i][i]=0; 17 } 18 19 //按列来,从第2列开始 20 for(int j=2;j<=n;j++){ 21 //按行来,从下往上 22 for(int i=j-1;i>=1;i--){ 23 //算除了两端的每一个分割点 24 for(int k=i+1;k<=j-1;k++){ 25 dp[i][j]=min(k+max(dp[i][k-1],dp[k+1][j]),dp[i][j]); 26 } 27 //算两端 28 dp[i][j]=min(dp[i][j],i+dp[i+1][j]); 29 dp[i][j]=min(dp[i][j],j+dp[i][j-1]); 30 } 31 } 32 return dp[1][n]; 33 } 34 };
分类:
LeetCode学习操练
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!