递归,回溯, 深度优先搜索

题目描述

有一叠扑克牌,每张牌介于1和10之间
有四种出牌方法:

单出1张
出2张对子
出五张顺子,如12345
出三连对子,如112233

给10个数,表示1-10每种牌有几张,问最少要多少次能出完

https://blog.csdn.net/m0_38065572/article/details/105019514


def dfs(l):if tuple(l) in memo:return memo[tuple(state)]if sum(l)==0:return 0else:res = float('inf')for i in range(10):if i<=5 and l[i]>=1 and l[i+1]>=1 and l[i+2]>=1 and l[i+3]>=1 and l[i+4]>=1:l[i:i+5]=[l[i+k]-1 for k in range(5)]res = min(res, dfs(l)+1)l[i:i+5]=[l[i+k]+1 for k in range(5)]memo[tuple(state)] = resif i<=7 and l[i]>=2 and l[i+1]>=2 and l[i+2]>=2:l[i:i+3]=[l[i+k]-1 for k in range(3)]res = min(res, dfs(l)+1)l[i:i+3]=[l[i+k]+1 for k in range(3)]memo[tuple(state)] = resif l[i]>=2:l[i]=l[i]-2res = min(res, dfs(l)+1)l[i]=l[i]+2memo[tuple(state)] = resif l[i]>=1:l[i]=l[i]-1res = min(res, dfs(l)+1)l[i]=l[i]+1memo[tuple(state)] = resreturn resdef input():l= '1 1 2 2 2 1 1 0 0 0'return lmemo={}
state= list(map(int,input().split()))
print(state)
print(dfs(state))

题目描述

首先定义上升字符串,对于任意的0<i<len(s)0<i<len(s)0<i<len(s),s[i]≥s[i−1],比如aaa,abc是,acbd不是
给n个上升字符串,选择任意个拼起来,问能拼出来的最长上升字符串长度

https://blog.csdn.net/m0_38065572/article/details/105019514

这个题目很类似于一个经典的题目,课表安排的问题,课表安排的问题可以使用动态规划,或贪心。

到j的最长长度是dpj

到j-1的最长长度dpj-1  和 到i的最长长度dpi+Sij 中间 较大的一个

动态规划问题可以用递归回溯,也可以记录每一步状态(这道题目中状态是以字符‘j’结尾的最长长度)


def longestAscString(strs:List[str])-> int:strs=sorted(strs,key=lambda x:(x[-1],x[0])) #尾字符升序,第二关键字为首字符升dp=[0]*26 #记录以字符j结尾的最长长度res=0# 记录全局最优last=0for string in strs:begin=ord(string[0])-ord('a')end=ord(string[-1])-ord('a')for i in range(last,end): # 没有这些字符结尾的最长长度,使用前面的最长长度更新dp[i+1]=dp[last]dp[end]=max(dp[end],dp[begin]+len(string))#dp递推公式,从记录的上一步全局最有值,推到下一步全局最优res=max(res,dp[end])last=endreturn resa=["bcdefhijk","bcd","aaa","eeeefghhh","zzzz",
]
b=['abc',
'hpq',
'qrt',
'jklmnopqr',
'abcjklmnopqr',]c=['abcd',
'deft',
'efghmnt',
'defghjkl',
'abcddefghjkl',]
print(longestAscString(c))

打牌博弈 dfs深度优先遍历搜索 排课表 拓扑排序 升序字符串 动态规划 剑指offer编程题整理 leetcode每日算法题相关推荐

  1. 排课表--拓扑排序【自己写的拓扑排序方法】[1]

    https://leetcode-cn.com/problems/course-schedule-ii/ 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例 ...

  2. LeetCode系列-DFS深度优先遍历

    DFS 详细介绍 秉承不撞南墙不回头的道理,标记当前节点,从当前节点出发采用递归的方式访问相邻的节点,一直到底. 递归出口:1.已经访问完从当前节点一直相邻的所有节点为止.2.超出边界.此当前节点已经 ...

  3. 【牛客 - 剑指offer】JZ12 矩阵中的路径 深度优先搜索DFS Java实现

    文章目录 剑指offer题解汇总 Java实现 本题链接 题目 题目主要信息 方案 深度优先搜索 剑指offer题解汇总 Java实现 https://blog.csdn.net/guliguligu ...

  4. LeetCode刷题——剑指offer深度优先搜索题目汇总

    剑指offer深度优先搜索题目汇总 剑指 Offer 12. 矩阵中的路径 剑指 Offer 34. 二叉树中和为某一值的路径 剑指 Offer 36. 二叉搜索树与双向链表 剑指 Offer 54. ...

  5. LeetCode Algorithm 剑指 Offer II 056. 二叉搜索树中两个节点之和

    剑指 Offer II 056. 二叉搜索树中两个节点之和 Ideas 这题有点类似一个组合题,首先是通过二叉树遍历得到一个序列,然后再通过LeetCode Algorithm 1. 两数之和的方法查 ...

  6. C#刷剑指Offer | 二叉搜索树的后序遍历序列

    [C#刷题]| 作者 / Edison Zhou 这是EdisonTalk的第289篇原创内容 我们来用之前学到的数据结构知识来刷<剑指Offer>的一些核心题目(精选了其中30+道题目) ...

  7. [剑指offer]JT29---最小的K个数(靓仔靓女,快进来学习快排讷!)

    剑指offer第二十九题 题目如下 思路与代码 sort()函数解千愁,面试官不愿回眸 十年磨一剑,快排永争先(手写快排) 题目如下 思路与代码 sort()函数解千愁,面试官不愿回眸 很简单,就是排 ...

  8. 【菜鸡新手 - 剑指offer 03】[2021/1/17一刷] 找出数组中重复的数字 -三种解法|| 物归原主,测试碰撞法 || hash表测试碰撞法 || 排序+遍历法 ||python

    文章目录 题目解读 A. 书籍推荐解法:我起名为" 物归原主,测试碰撞"法 B. 基础尝试1:hash表 + 碰撞测试 (效果还行) C. 基础尝试2:排序+遍历 (效果差) C. ...

  9. 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列

    剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...

最新文章

  1. python预处理删除特殊字符_python - 如何删除包含特殊字符的字符串?_others_酷徒编程知识库...
  2. Android下对Cookie的读写操作(附Demo)
  3. performSelector may cause a leak because its selector is unknown
  4. python中的类方法和静态方法
  5. C++的使用Lambda
  6. mysql 1.42_MySQL索引(一)
  7. 史上最简单的UIScrollView+Autolayout出坑指南
  8. WebApp开发技术搭配
  9. 关于Matlab中括号用法的总结
  10. Autodesk AutoCAD 2013 简体中文版下载
  11. Fastlane使用说明
  12. 百度脑图中如果想输入换行符本身(\n)怎么输入
  13. Win32_VideoController 显卡 参数说明
  14. torch基本功能介绍
  15. 华为AR路由器端口配置trunk_锐捷交换机和路由器的一些基础命令
  16. Jeecgboot报错Failed to configure a DataSource: ‘unl‘ attribute is not specified and no embedded dataso
  17. 中台建设:中台有效落地的6脉神剑
  18. VS 无法启动程序(系统找不到指定路径)的解决方法
  19. 浅谈蓝牙的多时隙分组
  20. 中文词性标注学习笔记(三)---词性标注

热门文章

  1. 钻石指标和完美的计算
  2. 2021年前端面试题总结
  3. AC-DMIS 5.3 工件与测针的准备
  4. 数据挖掘概念汇总及数据预处理
  5. Cadence Allegro恢复软件菜单栏默认设置图文教程及视频演示
  6. kail 常用小程序学习总结1
  7. 关于java构造方法的描述_下列关于Java中类的构造方法的描述,正确的是()
  8. Zero-DCE 论文阅读笔记
  9. __attribute__
  10. web端 刷卡器_web开发与IC卡读卡器