上一页 1 2 3 4 5 6 ··· 73 下一页
摘要: 题目 题意:判断一个字符串是否可以由三个回文串组成 题解:利用强大的回文树,计算出以每个字符为结尾的回文串,然后从字符串的最后一个字符开始,递归判断。 struct Tree { int next[4005][30]; int fail[4005]; int cnt[4005]; int num[4 阅读全文
posted @ 2021-02-15 11:53 Shendu.CC 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 题目 题意:从一个数组找出一个子集,使得子集的和给定的目标最相近。 题解:数组的长度为40,找出全部子集一共有240种可能性,如果把一个数组平均分成两部分,分别算出两部分的所有子集和,每部分有220种可能, 然后再二分查找答案。 遇到这种在数组里找所有子集和, class Solution { pu 阅读全文
posted @ 2021-02-13 17:42 Shendu.CC 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 题目 题意:将n个数分成k组,使得k组中的最大值最小。 题解:暴力DFS,但是要注意两个地方剪枝,首先在DFS的过程中判断当前的最大值是不是已经超过了已有答案。 第二个剪枝的地方比较triky,由于我们对k组没有顺序要求的,所以当剩下的组都是空的时候,我们只需要DFS第一个组。 class Solu 阅读全文
posted @ 2021-02-01 20:04 Shendu.CC 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 题目 拖了两个月,终于这这道题目AC了。 思路是贪心,将所有的元素从小到大排序。并且维护两个数组,一个数组代表每一行的当前已经填上的最大的rank,比如nrank[0]=2 表示第0行,目前已经填到了rank=2,下一个再填就一定是>=2的数字。 同理列也是。一开始nrank[],和mrank[]都 阅读全文
posted @ 2020-12-30 17:45 Shendu.CC 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 题目 题解: 动态规划,用二进制压缩状态,注意分析几种情况,就能推出来正确的状态转移方程。 class Solution { public: int dp[12][4096]; int connectTwoGroups(vector<vector<int>>& cost) { int n = cos 阅读全文
posted @ 2020-10-22 11:00 Shendu.CC 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 题目 题意:一个只有0-9组成的字符串,每次选择任意一个子串,按照数字从小到大排序。问从源字符串能否经过若干次操作转换成目标字符串。 题解:首先题目只问了是否,而没有问多少次,所以可以判断出,我们不关心过程是怎么样的,只关心结果能否到达。所以不太可能是动态规划,搜索什么的。 既然是看结果,那估计是个 阅读全文
posted @ 2020-09-21 12:57 Shendu.CC 阅读(166) 评论(1) 推荐(0) 编辑
摘要: 题目 题意:一堆橘子,要么吃一个,如果橘子数量能被2整除就可以吃一半,如果橘子数量能被3整除就可以吃三分之二,请问最少几次能吃完? 题解:橘子的个数是n,按照贪心的思想,肯定是吃一半或者吃三分之二划算。因此每一步,都有两种选择,要么一个一给吃,吃到能被2整除,然后吃掉一半。要么一个一个吃,吃到能被3 阅读全文
posted @ 2020-09-16 16:55 Shendu.CC 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 题目 区间DP,由于棍子长100万,所以我们在cuts之间做区间DP。 那么状态转移方程就是很简单直白的区间DP dp[i][j] = min { dp[i][k-1] + cost(k) + dp[k+1][j]} i<=k<=j cost(k) 表示 从k处切断的cost class Solut 阅读全文
posted @ 2020-08-18 15:52 Shendu.CC 阅读(554) 评论(0) 推荐(0) 编辑
摘要: 题目 题意:在一个数组中,找到最多的不相交的子序列,每个子序列的和等于target。 题解:动态规划 dp[i]表示从0到i的子数组的答案。维护前缀数组sums[],我们维护一个记录前缀和的map,map[x]表示前缀和是x距离当前i最近的下标。 那么状态转移方程就是dp[i] = max(dp[i 阅读全文
posted @ 2020-08-13 16:51 Shendu.CC 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 题目 一道好题目,把最长递增子序列扩展到二维,但是这道题和最长递增子序列是有区别的,它不要求是序列,只是在数组中找到一组最长的组合,不要求顺序在初始中相同。 这是个二维的最长递增子序列,由于没有顺序限制,所以我们把第一维进行排序,然后对第二维进行动态规划 接下来就和最长递增子序列的思路一样: 效率是 阅读全文
posted @ 2020-08-08 20:37 Shendu.CC 阅读(166) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 73 下一页