随笔分类 - 动态规划——线性DP(背包)
摘要:对于这题有一个不用单调队列并且不是玄学设置区间最大值的做法 这题校内模拟考的时候打二分+枚举,结果写炸了,跑过来看题解发现为什么他们的区间最大值都是 1005 ???特别懵,其实我的代码在dp方面并没有改善仍然是 O(n2) 但在对区间最大值依照题意进行缩小从而可以 AC。
阅读全文
摘要:题意:给n个积木,搭成两个高度相同的塔,问最高高度 正解是dp 答案在dp[n][0] 代码 cpp include using namespace std; int f[2][1000050],n,a[51],ans; int main(){ memset(f, 0x3f,sizeof(f));
阅读全文
摘要:题意 类似于~~就是~~背包。 解析 代码 跟解析有点不一样v[i]价值,w[i]重量,s背包容积,背包转移即可。
阅读全文
摘要:题意 dfs骗了30分,一开始想的距离正解差一点啊,贪心加dp就可以过的水题,真正太蒻了 解析 代码 cpp include using namespace std; struct node{ int x; int y; }a[210]; int m,n,k; int f[210][210]; bo
阅读全文
摘要:题意:给n个单词,如果单词a为单词b的前缀则a,b不能共存,问能共存的集合数(包括空集) 一道dp题,排序后判断,f[i][j]表示i和j是否能共存,f[i][j]=1表示能共存,初始化dp[i]=1,表示只有i一个单词,dp[i]表示前i个单词且一定含有第i个单词的集合数,如果f[i][j]=1,
阅读全文
摘要:题意 从n个数中选出和为m的组合个数(输入顺序不同的数是不同的) 输入样例: 4 4 1 1 2 2 输出样例 3 我们把每个数看作一件物品,它的重量就是它的值,价值就是1,而和m即为背包的容积,故背包跑一遍即可
阅读全文
摘要:题面给两个序列a,b长度分别为n,m求最长公共上升子序列,百度了一下求公共子序列的问题好像叫做LCS,而上升的叫做LCIS。都是dp的例题。 先来说说最长公共子序列,这是一道比较经典的dp题,我们可以很容易写出 1.状态F[i][j]表示a序列匹配到第i个b序列匹配到第j个的最长长度 2.状态转移方
阅读全文
摘要:题意 如下图所示为一个数字三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 请编程计算从顶至底部某处的一条路径,使该路径所经过的数字的总和最大。约定: (1)每一步可沿直线向下或右斜线向下走; (2)1 using namespace std; int n,x,y,a[110][
阅读全文