摘要: 假设最大子串为[i…k],那么其前缀之和sum[i…j](jsum[i…k],这与假设相反。得到这一结论,我们就可以设置一个临时变量用来计算前k个输之和,若为负,则将其置为0,否则判断其是否比当前最大值大。当k=n时,就找到了最大子串。class Solution {public: int maxS... 阅读全文
posted @ 2016-12-17 09:20 Initial_Dream 阅读(146) 评论(0) 推荐(0)
摘要: 这道题很容易得出递推关系了,因为每个数只能由其上一层相邻的左右两个数走到,所以dp[i][k]=min(dp[i-1][k],dp[i-1][k+1])+triangle[i][k],由于我们只关心最小的数,所以其实可以直接用原来的数组存放中间值,到了最后一层中到达每个数的最小值的最小就是所求结... 阅读全文
posted @ 2016-12-17 09:19 Initial_Dream 阅读(122) 评论(0) 推荐(0)
摘要: 典型的背包问题,假设小于n的完全平方数为Si,那么dp[n]=min(dp[n-S1],dp[n-S2],…dp[n-Si])+1class Solution {public: int numSquares(int n) { vectordp(n + 1, INT_MAX); dp[0]=0; ... 阅读全文
posted @ 2016-12-17 09:17 Initial_Dream 阅读(179) 评论(0) 推荐(0)
摘要: 首先BST的定义为左子树每个结点小于根结点,右子树每个结点大于根节点。假设序列为[1…n],最大BST为dp[n],那么我们知道所有的BST为以每个数k(1dp(n + 1, 0); dp[0] = dp[1] = 1; for (int i = 2; i < n + 1;++i) for... 阅读全文
posted @ 2016-12-17 09:15 Initial_Dream 阅读(114) 评论(0) 推荐(0)