文章目录

  • 1. [我能赢吗](https://leetcode.cn/problems/can-i-win/)
    • 1.1 记忆化搜索+DFS+位运算
  • 2. [最长公共子序列](https://leetcode.cn/problems/longest-common-subsequence/)
    • 2.1 动态规划
  • 总结

1. 我能赢吗

在 “100 game” 这个游戏中,两名玩家轮流选择从 1 到 10 的任意整数,累计整数和,先使得累计整数和 达到或超过 100 的玩家,即为胜者。

如果我们将游戏规则改为 “玩家 不能 重复使用整数” 呢?

例如,两个玩家可以轮流从公共整数池中抽取从 1 到 15 的整数(不放回),直到累计整数和 >= 100。

给定两个整数 maxChoosableInteger (整数池中可选择的最大数)和 desiredTotal(累计和),若先出手的玩家是否能稳赢则返回 true ,否则返回 false 。假设两位玩家游戏时都表现 最佳 。

1.1 记忆化搜索+DFS+位运算

感受到了一点儿这类题的思想,算是开个头吧,以后会多练这一块的……

class Solution {public:unordered_map<int, bool> memo;bool canIWin(int maxChoosableInteger, int desiredTotal) {// 如果所有数加起来,都没有那么大,那么返回falseif ((1 + maxChoosableInteger) * (maxChoosableInteger) / 2 < desiredTotal) {return false;}// dfsreturn dfs(maxChoosableInteger, 0, desiredTotal, 0);}bool dfs(int maxChoosableInteger, int usedNumbers, int desiredTotal, int currentTotal) {// 记忆化搜索:如果未出现过该情况,进行dfs判断if (!memo.count(usedNumbers)) {bool res = false;// 检查每一位,是否使用过for (int i = 0; i < maxChoosableInteger; i++) {// 如果未使用过,进行下一步判断if (((usedNumbers >> i) & 1) == 0) {// 如果加上该数超过累计和,说明该情况能赢,返回正确,结束if (i + 1 + currentTotal >= desiredTotal) {res = true;break;}// 使用该数,即usedNumbers | (1 << i),如果对面赢不了,那么返回正确if (!dfs(maxChoosableInteger, usedNumbers | (1 << i), desiredTotal, currentTotal + i + 1)) {res = true;break;}}}// 记录该结果memo[usedNumbers] = res;}// 如果出现过该情况,直接返回return memo[usedNumbers];}
};

2. 最长公共子序列

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。
两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

2.1 动态规划

具体的看这篇。

class Solution {public:int longestCommonSubsequence(string text1, string text2) {int m = text1.size();int n = text2.size();if (m > n) return longestCommonSubsequence(text2, text1);vector<int> dp(n + 1);for (int i = 1; i <= m; i++) {int last = dp[0];for (int j = 1; j <= n; j++) {int temp = last;last = dp[j];if (text1[i - 1] == text2[j - 1])dp[j] = temp + 1;else dp[j] = max(dp[j], dp[j - 1]);}}return dp[n];}
};

总结

今天写了好多算法题,都在算法实验指导里面……感觉东西很杂,明天得复习……

365天挑战LeetCode1000题——Day 014 每日一题 + 最长公共子序列相关推荐

  1. 经典算法题——最长公共子序列

    ** 解析: ** 此题一共有两个要点: 1.求上述两个最长公共子序列的长度 2.求所有可能出现的最长公共子序列个数,答案可能很大,只要将答案对10^8求余即可 第一个都很好想到,难点在于第二个.下面 ...

  2. leetcode算法题--最长公共子序列★

    原题链接:https://leetcode-cn.com/problems/longest-common-subsequence/ 动态规划 dp[i][j]表示text1[:i]和text2[:j] ...

  3. 程序员面试100题之六:最长公共子序列

           题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串.注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中.请编写一个函数,输 ...

  4. 牛客题霸 [最长公共子序列] C++题解/答案

    牛客题霸 [最长公共子序列] C++题解/答案 题目描述 给定两个字符串str1和str2,输出连个字符串的最长公共子序列.如过最长公共子序列为空,则输出-1. 题解: dp经典问题 代码: clas ...

  5. 程序员面试100题之六 最长公共子序列

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴!      ...

  6. nyoj 36 最长公共子序列 dp问题最长公共子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共

    最长公共子序列 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 3 描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列. tip:最长公共子序列也称 ...

  7. Human Gene Functions(最长公共子序列变形题)

    [题目]:问题 B:  Human Gene Functions [来源]:点击打开链接 [解法]:这个题是最长公共子序列的变形题. 1.确定状态:状态表示显然是用二维数组表示DP[i][j]当前i和 ...

  8. LeetCode高频题:最长公共子序列,玩游戏A和游戏B,两兄弟加起来最多可以获得多少奖品

    LeetCode高频题:最长公共子序列,玩游戏A和游戏B,两兄弟加起来最多可以获得多少奖品? 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面 ...

  9. LeetCode第 1143 题:最长公共子序列(C++)

    1143. 最长公共子序列 - 力扣(LeetCode) 二维dp 回溯法枚举,回溯法本质上可行,但是字符串太长的话复杂度太高,那能不能用动态规划呢?那就得先从回溯理一下思路: 回溯的思路,从 a[0 ...

最新文章

  1. 广东生态所孙蔚旻团队EST发表利用稳定同位素示踪-宏基因组分箱联用技术揭示砷污染土壤中的厌氧砷氧化微生物及其代谢途径...
  2. C语言中定义加号的数据类型,C/C++知识点之c语言基础数据类型及命名规范
  3. 版式文件 流式文件_银河麒麟操作系统V10全面适配各类流式版式软件
  4. BugKuCTF WEB flag在index里
  5. (二)git常用基本概念
  6. CC攻击(N个免费代理形成的DDOS)
  7. 论坛头条内容链接地址有误
  8. php imagick
  9. Eclipse用法和技巧十一:分栏显示
  10. OV摄像头SCCB通信协议
  11. Apache Kylin中对上亿字符串的精确Count_Distinct示例
  12. 动态水晶报表:任意表,任意列 之 动态格线实现
  13. PB如何配置数据源及自带的PB系统
  14. 计算机在微表情的应用,一种有效的微表情自动识别方法
  15. winrar是不是计算机应用软件,请注意winrar不是一个免费软件。在40天的试用期结束后,你必须购买一个许可,或者将他从你的计算机中删除...
  16. 人物五官怎么画?怎样才能画好人物五官?
  17. HC-SR04超声波模块的使用(stm32f103c8t6/HAL)(超详细)
  18. configure命令的使用
  19. kudu作为mysql从机_kudu 知识点学习(一)
  20. Verilog训练笔记(2)——数据降速增宽

热门文章

  1. Qt快速转换路径(斜杠与反斜杠转换)
  2. 【视频编码】ffmpeg压缩视频文件
  3. N - Sport Mafia(数学)
  4. 未来的计算机事业作文600字,模块计算机考试的感想
  5. Collaborative Spatiotemporal Feature Learning for Video Action Recognition 论文笔记
  6. UiPath估值超百亿!这家来自罗马尼亚深耕中国市场的公司已进入市场高增长期...
  7. 目标管理是项目管理的核心思想之
  8. Python 第三方包的使用指南
  9. ghost android x86,系统之家GHOST WIN7x86 纯净版v2019.11
  10. 如何优化网站,网站推广优化一般流程有哪些