摘要:
题目连接 这个题目对dp思想的理解和对dp问题边界问题的处理很有帮助。 题解:定义dp[i][j]表示s的前i个字符和p的前j个字符是否可以匹配。 假如说p的第j个字符和s的第i个字符一样,那么dp[i][j]=dp[i-1][j-1],不一样的话,直接就是false 如果p的第j个字符是?,那么一 阅读全文
摘要:
题目连接 这个题目对dp思想的理解和对dp问题边界问题的处理很有帮助。 题解:定义dp[i][j]表示s的前i个字符和p的前j个字符是否可以匹配。 假如说p的第j个字符和s的第i个字符一样,那么dp[i][j]=dp[i-1][j-1],不一样的话,直接就是false 如果p的第j个字符是?,那么一 阅读全文
摘要:
题目链接 题解:定义状态dp[i][j]为从当前状态到终点的最小初识值。那么dp[i][j]可以由dp[i+1][j]和dp[i][j+1]转移过来,转移方程为min(dp[i+1][j],dp[i][j+1])-dungeon[i][j]即当前状态为其右下的最小值减去当前的矩阵的值,就是所需要的值 阅读全文
摘要:
首先要清楚什么是二叉搜索树,数据结构课上讲过,就是父节点大于左节点小于右节点的二叉树,二叉搜索树的性质就是中序遍历后得到的数组为升序数组。 具体的构建思路采用递归分分治的方法构造,根节点一定是中间的节点,确定好根节点后,根节点左边的为左儿子节点,右边的为右儿子节点。 code: /** * Defi 阅读全文
摘要:
Problem StatementCompute A×B, truncate its fractional part, and print the result as an integer. InputInput is given from Standard Input in the followi 阅读全文
摘要:
题目大意:n个人要买东西,然后每个人可以选择自己购买,花费的时间是ai,也可以选择和自己前边的人一块购买这两个人一块买花费的时间是bi,问这n个人需要的最少时间,如果从08:00:00开始算起,那么最早几点结束。 题解:定义状态dp[i]表示前i个人的需要的最少时间,第i个人可以自己买dp[i]=d 阅读全文
摘要:
中文题目,题意好理解。 题解:定义状态DP[i][j]表示第i秒在第j个位置处的最优状态,每一个点只能由相邻点转移,所以转移方程就是dp[i][j]=max({dp[i-1][j],dp[i-1][j-1],dp[i-1][j+1]})+arr[i][j],arr[i][j]表示当前状态下的物品的数 阅读全文
摘要:
思路:和逆波兰式相似,首先开两个栈,一个保存数字,一个保存字符,当遇到[的时候,首先将数字入栈,再将数字前边的字符入栈,然后在利用一个字符串保存[ ]中的字符,直到遇到 ] 首先是对[ ] 进行翻倍,然后再和字符栈的栈顶元素叠加倍数次.... code: class Solution { publi 阅读全文
摘要:
中文题目,题意略。 题解:可以考虑烤鱼一个点i,从1~i买入,从i~n的路上售出。所以我们可以维护数组dis1[x]从1到x的路径的最小点权值,然后从dis2[x]维护从x到n的路径上的点的最大权值。维护数组可以通过spfa来维护,最后在枚举i就可以了。 code: #include<bits/st 阅读全文
摘要:
题目大意: 给出一个序列,然后求这个序列的最大上升子序列的和。 题解:定义状态dp[i]表示前i个数的最大和,dp[i]的最小值应该是arr[i]了,因为i前边可能有负数,对于负数,虽然可以构成上升子序列,但是没有必要选。 code: #include<bits/stdc++.h> using na 阅读全文
摘要:
题意:一个n*m的矩阵,每一个位置都有一定的高度,要求从(1,1)走到(n,m)并且每次移动只能向下或者向右移动,并且要求只能向比自己高度高1的位置移动。定义一个操作:执行一次可以使得任意一个格子的额高度减一,问从1,1到n,m操作的最少次数。 题解:首先一定会有一个格子的高度保持不变,设h(i,j 阅读全文
|