Processing math: 100%

随笔分类 -  动态规划——线性DP(背包)

摘要:对于这题有一个不用单调队列并且不是玄学设置区间最大值的做法 这题校内模拟考的时候打二分+枚举,结果写炸了,跑过来看题解发现为什么他们的区间最大值都是 1005 ???特别懵,其实我的代码在dp方面并没有改善仍然是 O(n2) 但在对区间最大值依照题意进行缩小从而可以 AC阅读全文
posted @ 2019-11-03 21:17 End_donkey 阅读(151) 评论(0) 推荐(0) 编辑
摘要:题意:给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)); 阅读全文
posted @ 2019-08-27 10:39 End_donkey 阅读(132) 评论(0) 推荐(0) 编辑
摘要:题意 类似于~~就是~~背包。 解析 代码 跟解析有点不一样v[i]价值,w[i]重量,s背包容积,背包转移即可。 阅读全文
posted @ 2019-08-27 10:37 End_donkey 阅读(244) 评论(0) 推荐(0) 编辑
摘要:题意 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 阅读全文
posted @ 2019-08-27 10:35 End_donkey 阅读(218) 评论(0) 推荐(0) 编辑
摘要:题意:给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, 阅读全文
posted @ 2019-08-27 10:21 End_donkey 阅读(151) 评论(0) 推荐(0) 编辑
摘要:题意 从n个数中选出和为m的组合个数(输入顺序不同的数是不同的) 输入样例: 4 4 1 1 2 2 输出样例 3 我们把每个数看作一件物品,它的重量就是它的值,价值就是1,而和m即为背包的容积,故背包跑一遍即可 阅读全文
posted @ 2019-08-26 20:58 End_donkey 阅读(164) 评论(0) 推荐(0) 编辑
摘要:题面给两个序列a,b长度分别为n,m求最长公共上升子序列,百度了一下求公共子序列的问题好像叫做LCS,而上升的叫做LCIS。都是dp的例题。 先来说说最长公共子序列,这是一道比较经典的dp题,我们可以很容易写出 1.状态F[i][j]表示a序列匹配到第i个b序列匹配到第j个的最长长度 2.状态转移方 阅读全文
posted @ 2019-08-26 20:53 End_donkey 阅读(225) 评论(0) 推荐(0) 编辑
摘要:题意 如下图所示为一个数字三角形: 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][ 阅读全文
posted @ 2019-08-26 20:51 End_donkey 阅读(276) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示