摘要: 给定正整数数组nums[n],将数组分割成1个或多个连续子数组,如果不存在包含了相同数字的两个子数组,则认为是一种好分割方案,求好分割方案的数目,结果对1000000007取模。 1<=n<=1e5; 1<=nums[i]<=1e9 相同的数字只能分到同一个子数组,转化成区间合并问题。然后枚举每个可 阅读全文
posted @ 2024-03-21 22:37 chenfy27 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 有一根长度为n的木棍,从0到n标记了若干个位置。给定一个数组cuts[m],表示要在cuts[i]位置切开,每次切割的成本是当前木棍的长度,求总成本的最小值。 2<=n<=1e6; 1<=m<=min(n-1,100); 1<=cuts[i]<=n-1; cuts[i]各不相同 正向思考的话可以记忆 阅读全文
posted @ 2024-03-21 22:09 chenfy27 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 给定长为n的字符串s,每次操作可以在字符串的任意位置插入任意1个字符,如果要让s成为回文串,至少要操作多少次? 1<=n<=500 区间dp,记dp[i][j]表示让[i,j]区间成为回文串的最少操作次数,考虑s[i]与s[j]的相等关系进行转移。 class Solution { public: 阅读全文
posted @ 2024-03-21 21:34 chenfy27 阅读(4) 评论(0) 推荐(0) 编辑
摘要: A从1到n之间选择一个数字让B来猜,假设B猜数字x,如果猜对,直接结束;否则B需要支付金额x,然后A告诉B小了或者大了并继续猜。给定数字n,问能确保获胜的最小现金,无论A选择哪个数字。 1<=n<=200 区间dp,记dp[i][j]表示区间为[i,j]时获胜所需的最小现金,枚举每次猜的数字k,考虑 阅读全文
posted @ 2024-03-21 21:28 chenfy27 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 给出两个字符串word1和word2,需要从word1和word2分别选出某个非空子序列s1和s2,要求连接s1与s2后得到回文串,求该回文串的最大长度。 word1和word2长度在[1,1000]内。 区间dp,将word1与word2拼接起来,转换成求单个字符串的的最长回文子序列问题,为了保证 阅读全文
posted @ 2024-03-21 21:04 chenfy27 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 给定长度为n的字符串s,求最长回文子序列的长度。 1<=n<=1000 区间dp,记dp[i][j]表示区间[i,j]能构成的最长回文串的长度,根据s[i]跟s[j]是否相等进行转移。 class Solution { public: int dp[1005][1005]; int longestP 阅读全文
posted @ 2024-03-21 20:50 chenfy27 阅读(1) 评论(0) 推荐(0) 编辑