随笔分类 - DP
摘要:题意:从左上角到右下角 从左下角到右上角 两条路,求经历过的格子和最大,重叠的不算 分析:分别算出从四个角出发到任意一点的最大值,枚举交点即可。
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5791 题意:找两个数组有多少个相同的子序列 分析:dp[i][j] = dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]; 如果a[i]==b[j]还要加上dp[i-1][j-1]+
阅读全文
摘要:题目大意:中文题:http://poj.org/problem?id=1088 先上一发自己写的记忆化,渣,900多毫秒 #include <iostream> #include <cstdio> #include <stack> #include <cstring> using namespace
阅读全文
摘要:题意:输入n 输入n行n列 从n行中找出n个数 保证任意两个都不在同一列 求这些数的和。 思路:dp[i][j]表示前i个选的列状态为j。需要注意的是一个优化,代码中有标识
阅读全文
摘要:题意:求通过c1个1分的c2个5分的c3个10分的c4个25分的组成p的最多个数并且输出分别选多少个。 分析:多重背包+一个数组保存当前最优解情况下选的个数;
阅读全文
摘要:题意:输入t组数据。每组数据输入n,并且输入n对数,表示这一层有a个男生,b个女生,每一层可以修建一个宿舍,只能男生住或者女生住,求可以让这些人走的层数最少。 分析:首先需要保存前i层的男或女到达0的点距离和dsum,保存前i层男或女的个数sum。这样通过这两个数组求得一个区间内的男或女到达任一点的
阅读全文
摘要:题意:找出长度为n的序列中 递增序列长度为m的个数。 分析:dp[i][j] = sum(dp[1][j-1]+dp[2][j-1]+~+dp[i-1][j-1])
阅读全文
摘要:题意:输入t,表示t组样例, 输入n,len,表示物品的个数和容器长度。输入n行a,v表示没个物品的长度和价值。每个物品只要能有一半放在容器上就可以(为了平衡,如果是一个物品的话不论它有多长都可以放在这个容器上),不可以重叠,求这个容器可以放最大的价值是多少。 分析:dp[i][j][k]表示前i个
阅读全文
摘要:分析:为了得到最优解,从m中取出5来买最贵的。
阅读全文
摘要:题意:输入n,m表示n个点,m条边,求一条递增的序列的点数与末尾点连接的点个数的乘积最大值。 分析:dp跑一下,时间复杂度O(m)。
阅读全文
摘要:题意:输入n,m,表示有n个地点,m为最大的花费。接着输入n个地点的坐标x,y,起点为第一个地点。还有n个地点的花费。第一问求,每个人有m个钱,求访问完n个点至少需要多少个人。 第二问是可以有任意多个人,求从起点出发遍历n个点后再回到起点的最少距离。 分析:第一问可以状态压缩后,进行01背包。第二问
阅读全文
摘要:分析:算1和2的起点在哪里,然后往后累加就可以了。
阅读全文
摘要:题意: 输入t,表示t组样例。然后每组样例输入n,m,n表示物品个数,接着输入n个数。求从这些数中找出和不超过m的最多物品数量Max,以及满足Max个的种类。 分析:dp[i][k][j] 表示前i个物品中,挑选出k个物品的总和为j的数量。那么dp[i][k][j] = dp[i-1][k][j]
阅读全文
摘要:题意:输入n,m,表示有n个物品,m单位的钱,接下来输入n行 p, q, v 分别表示 花费, 手中需要有的费用, 价值。求最多能够取得的价值。 分析:如果没有q的话就是简单的01背包,加入q这个限制条件后,需要对物品的q-p进行升序排序。 原因: for (i=1; i<=n; i++) for
阅读全文
摘要:题意:输入t,t组测试样例,每组样例输入 n, v, k. 接着输入n个物品的价值,再输入n个物品的体积。求k优解。 分析:dp[n][v][k]表示n个物品,在体积不超过v的情况,第k大的值是多少。dp[i][v][k]与dp[i-1][v][k]与dp[i-1][v-volume[i]]+val
阅读全文
摘要:题意 输入两个数 len,n 表示长度和个数,接下来输入n个数, 表示每一个的长度, 求这n个数能够组成的不超过len的最大长度,并输出这些数。 分析:01背包,dp数组非0表示可以组成的数,dp数组用来记录路径
阅读全文
摘要:题意:输入n,然后输入n行n列的字符。求这个矩阵中子矩阵是关于左下角到右上角这条线对称的最大矩阵边。 解析:枚举每一个点作为对称轴的左下角,然后从这一点分别向上和向右寻找,知道找到一个不相等的字符,或者这个点越界,停止。 如果这个矩阵比以这个点右上角的点大,那么更新dp[i][j]=dp[i-1][
阅读全文
摘要:题意:输入n,然后输入n行n列的矩阵,找出这个矩阵中的子矩阵最大值。
阅读全文
摘要:题意:输入n,k 表示方格的长宽为n,每次能够走的最大格子为k,然后输入n行n列个数,起点在(0,0),每次可以上下左右移动,每次移动的格子要比当前格子数目大,而且移动的单位不能超过k,求最后能够得到的最大值。 分析:从起点开始搜,搜索那些点可以走,然后找最大值(记忆化搜索)
阅读全文
摘要:题意:从起点走到地面的最短时间 分析:每一层只能由上面的掉下来,可能是上面的任何一层,那么反过来,上面的每一层只能由左端或者右端往下掉,掉到下面的某一层的左右端点包含上面这一层的左端或者右端,那么将这n个台阶按照从下往上排序。 dp[i][0]表示从下面到达第i层的左端花费最短的时间,dp[i][1
阅读全文

浙公网安备 33010602011771号