摘要:
题意:
有n座城市,Trisha要求在这n座城市旅游k天,从城市1出发,第k天到达城市n。
输入有n*(n-1)行,每n-1行代表i到除了i之外的其他城市航班的时间以及价格。
求出Trisha的最小花费。
思路:
链式dp,dp[i][d]代表第d天到达i城市所需要的最小代价,于是dp[i][d] = min(dp[i][d], dp[j][d-1] + price[j][i][X])。
意思是:第d天到达i城市所花费的代价是,第d-1天到达j城市 + j到i的价格 最小的一个。 阅读全文
摘要:
题意:
类似于跳棋,当两颗石子左或者右有空位置时,移动。每次转移之后移去经过的石子。
思路:
有12个格子,所以状态最多有2^12=4096个。把每次搜索过的状态存在dp[]数组中,以后再次查询类似的直接返回即可。 阅读全文
摘要:
题意:
一些重量递增而且各个面都有颜色的立方体,要将这些立方体堆成一个塔,要求两个接触面同色,而且下面的立方体更重。求塔的最大高度。 阅读全文
摘要:
题意:
找一个最长(假设长度为2N-1)的子序列,使得前N个元素递增,后N个元素递减。
思路:
LIS。从1-n遍历求出最长上升子序列,再从n-1遍历求出逆序的最长上升子序列。
用最朴素的LIS算法是O(n*n),这一题就tle了。于是网上搜索出来一种O(nlogn)的算法。 阅读全文
摘要:
题意:
给定2个字符串a, b,求b在a中出现的次数。要求可以是不连续的,但是b在a中的顺序必须和b以前的一致。
思路:
类似于数字分解的题目。dp[i][j]表示:b的前j个字符在a的前i个字符中出现的次数。
似乎这种表示方法司空见惯,但是一开始我还真没能搞懂如何去递推。事情的真相是:
如果a[i] == b[j]则 dp[i][j] = dp[i-1][j] + dp[i-1][j-1]
如果a[i] != b[j]则 dp[i][j] = dp[i-1][j] 阅读全文
摘要:
题意:
有t组测试数据,每组测试数据给一个矩阵n,m。
接下来给出n行,每行第一个数字为该行的编号(从1开始),然后给出这行不能走的y坐标。
问从出发点(1,1),到(n,m)有多少种不同的路径。 阅读全文
摘要:
题意:
一堆石子,两个人每次可以拿X个,X有m种拿法。拿到最后石子的人获胜。
思路:
简单的状态递推dp,dp[i]=true表示有i个石子,首先选的人可以获胜。 阅读全文
摘要:
题意:
给你n种石头,长x,宽y,高z,每种石头数目无限,一块石头能放到另一块上的条件是:长和宽严格小于下面的石头。问叠起来的最大高度。 阅读全文