摘要: class Solution { public: int getMoneyAmount(int n) { vector> dp(n + 1, vector(n + 1)); for (int i = 1;i <= n;i++) { dp[i][i] = 0; if (i != n) { ... 阅读全文
posted @ 2019-06-22 20:01 suuusu 阅读(324) 评论(0) 推荐(0) 编辑
摘要: pow(x,i) (1) i%2==0 pow(x,i)=pow(x,i/2)*pow(x,i/2); (2) i%2!=0 pow(x,i)=pow(x,i-1)*x; 阅读全文
posted @ 2019-06-22 16:15 suuusu 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 又是一道找到了状态转移方程,就可以迎刃而解的问题 但是状态转移方程不好找啊 分析题目: 每一天的四种状态:买进、卖出、冷冻期、什么都不做 每天的状态排列遵循:买...卖冷...买...卖冷... 其中...代表什么都不做的日子,可能有多个 因为有的日子什么都不做,没办法指明某一天到底进行了哪种操作, 阅读全文
posted @ 2019-06-22 09:00 suuusu 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 这道题尝试了dfs,bfs,dp dfs超时了 这道题类似于背包问题 物品:完全平方数,每种都有无数个 包的容积:n 目标:恰好把包放满时,物品的个数最少 这道题如果暴力的话,应该使用bfs,而不是dfs,类似于求最短路径,最快走到出口的就是最优解 使用dp的重点在于递推式,看了大佬(leetcod 阅读全文
posted @ 2019-06-21 11:07 suuusu 阅读(575) 评论(0) 推荐(0) 编辑
摘要: 因为首尾不能同时选择 分两种情况:(1)不考虑“尾” (2)不考虑”首“ dp1[ i ] ——不考虑尾时,以 i 结尾的最大不连续序列和 dp2[ i ] ——不考虑首时,以 i 结尾的最大不连续序列和 然后求dp1和dp2中的最大值 阅读全文
posted @ 2019-06-20 10:28 suuusu 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 定义一个队列Q,把入度为0的结点入队 若Q不为空,则取队首结点,删去所有从该点出发的边,并把这些边所到达结点的入度减一,若某个节点入度减为0,则将它入队 反复进行如上操作,直到队列为空。(当总的入队次数大于节点数时,跳出循环) 如果这时入过队的节点数恰好等于节点总数,则为有向无环图。否则有环。 阅读全文
posted @ 2019-06-20 08:41 suuusu 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 给定数列 nums dp[i] ——以nums[i]为结尾的子串的最大和 *** 开始:dp[0]=nums[0] 状态转移:dp[i] = max( dp[i-1]+nums[i],nums[i] ) 阅读全文
posted @ 2019-06-06 18:38 suuusu 阅读(651) 评论(0) 推荐(0) 编辑
摘要: 注意情况:s="" 则ans="" 基本思想:一个子串[i,j] 如果s[i]=s[j] 且子串[i+1,j-1]是回文子串,那么[i,j]是回文子串 使用数组记录状态,而非递归 dp[maxn][maxn] -> 若子串[i,j]是回文子串,则dp[i][j]表示它的长度,否则为0 逻辑上是使用数 阅读全文
posted @ 2019-06-06 08:18 suuusu 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 题目分析: 给定可选数序列a(n个数)1<=n<=20 2<= a[i] <=20 我们和对方轮流选数,当前轮到我们。 状态压缩:①n位二进制数x(0代表可选,1代表不可选) ②轮到谁turn (turn=true轮到我们 反之轮到对方) 状态存储:int state[maxX][2] maxX为2 阅读全文
posted @ 2019-06-04 18:59 suuusu 阅读(174) 评论(0) 推荐(0) 编辑