打牌博弈 dfs深度优先遍历搜索 排课表 拓扑排序 升序字符串 动态规划 剑指offer编程题整理 leetcode每日算法题
递归,回溯, 深度优先搜索
题目描述
有一叠扑克牌,每张牌介于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]
https://leetcode-cn.com/problems/course-schedule-ii/ 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例 ...
- LeetCode系列-DFS深度优先遍历
DFS 详细介绍 秉承不撞南墙不回头的道理,标记当前节点,从当前节点出发采用递归的方式访问相邻的节点,一直到底. 递归出口:1.已经访问完从当前节点一直相邻的所有节点为止.2.超出边界.此当前节点已经 ...
- 【牛客 - 剑指offer】JZ12 矩阵中的路径 深度优先搜索DFS Java实现
文章目录 剑指offer题解汇总 Java实现 本题链接 题目 题目主要信息 方案 深度优先搜索 剑指offer题解汇总 Java实现 https://blog.csdn.net/guliguligu ...
- LeetCode刷题——剑指offer深度优先搜索题目汇总
剑指offer深度优先搜索题目汇总 剑指 Offer 12. 矩阵中的路径 剑指 Offer 34. 二叉树中和为某一值的路径 剑指 Offer 36. 二叉搜索树与双向链表 剑指 Offer 54. ...
- LeetCode Algorithm 剑指 Offer II 056. 二叉搜索树中两个节点之和
剑指 Offer II 056. 二叉搜索树中两个节点之和 Ideas 这题有点类似一个组合题,首先是通过二叉树遍历得到一个序列,然后再通过LeetCode Algorithm 1. 两数之和的方法查 ...
- C#刷剑指Offer | 二叉搜索树的后序遍历序列
[C#刷题]| 作者 / Edison Zhou 这是EdisonTalk的第289篇原创内容 我们来用之前学到的数据结构知识来刷<剑指Offer>的一些核心题目(精选了其中30+道题目) ...
- [剑指offer]JT29---最小的K个数(靓仔靓女,快进来学习快排讷!)
剑指offer第二十九题 题目如下 思路与代码 sort()函数解千愁,面试官不愿回眸 十年磨一剑,快排永争先(手写快排) 题目如下 思路与代码 sort()函数解千愁,面试官不愿回眸 很简单,就是排 ...
- 【菜鸡新手 - 剑指offer 03】[2021/1/17一刷] 找出数组中重复的数字 -三种解法|| 物归原主,测试碰撞法 || hash表测试碰撞法 || 排序+遍历法 ||python
文章目录 题目解读 A. 书籍推荐解法:我起名为" 物归原主,测试碰撞"法 B. 基础尝试1:hash表 + 碰撞测试 (效果还行) C. 基础尝试2:排序+遍历 (效果差) C. ...
- 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列
剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...
最新文章
- python预处理删除特殊字符_python - 如何删除包含特殊字符的字符串?_others_酷徒编程知识库...
- Android下对Cookie的读写操作(附Demo)
- performSelector may cause a leak because its selector is unknown
- python中的类方法和静态方法
- C++的使用Lambda
- mysql 1.42_MySQL索引(一)
- 史上最简单的UIScrollView+Autolayout出坑指南
- WebApp开发技术搭配
- 关于Matlab中括号用法的总结
- Autodesk AutoCAD 2013 简体中文版下载
- Fastlane使用说明
- 百度脑图中如果想输入换行符本身(\n)怎么输入
- Win32_VideoController 显卡 参数说明
- torch基本功能介绍
- 华为AR路由器端口配置trunk_锐捷交换机和路由器的一些基础命令
- Jeecgboot报错Failed to configure a DataSource: ‘unl‘ attribute is not specified and no embedded dataso
- 中台建设:中台有效落地的6脉神剑
- VS 无法启动程序(系统找不到指定路径)的解决方法
- 浅谈蓝牙的多时隙分组
- 中文词性标注学习笔记(三)---词性标注