算法竞赛模板 动态规划之背包DP】的更多相关文章

① 01背包 有n件物品和一个容量为v的背包.第i件物品的价值是c[i],体积是w[i].求解将哪些物品装入背包可使价值总和最大. 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放. #include<bits/stdc++.h> using namespace std; int main() { ],c[],dp[]; cin>>t; while(t--) { memset(dp,,sizeof dp); cin>>n>>v; ;i<…
垃圾陷阱 luogu-1156 题目大意:Holsteins在距离地面D英尺的地方,FJ间隔时间ti会往下扔第i个垃圾.Holsteins对待每一个垃圾都会选择吃掉或者垫高.Holsteins有10个点儿的生命值,每个垃圾会给她提供f的生命值.每小时Holsteins会消耗一定的生命值.问:Holsteins最早可以什么时候爬出:否则输出Holsteins可以存活多长时间. 注释:$2\le D\le 100$,$0 < t \le 1000$,$1\le h \le 25$,$1\le f \…
Money奶牛的硬币 bzoj-1708 Usaco-2007 Oct 题目大意:在创立了她们自己的政权之后,奶牛们决定推广新的货币系统.在强烈的叛逆心理的驱使下,她们准备使用奇怪的面值.在传统的货币系统中,硬币的面值通常是1,5,10,20或25,50,以及100单位的货币,有时为了更方便地交易,会发行面值为2单位的硬币. 奶牛们想知道,对于一个给定的货币系统,如果需要正好凑出一定数量的钱,会有多少种不同的方法.比如说,你手上有无限多个面值为{1,2,5,10,...}的硬币,并且打算凑出18…
背包问题是线性背包中的一类重要问题. 0/1背包 模型: 给定N个物品,每一个物品具有两种属性,一个是体积 \(v_i\) ,另一个是容积 \(w_i\) . 有一个容积为M的背包,求一种方案,使得选择的物品的体积不超过背包体积的情况下,使得获得的总价值最大. 0/1背包的时间复杂度是\(O(n*m)\). 空间复杂度随着写法的不同而不同. 方法一:按照定义写 #include <bits/stdc++.h> using namespace std; int n, m;//n表示的是商品的数目…
AcWing271. 杨老师的照相排列 思路 这是一个计数的题目,如果乱考虑,肯定会毫无头绪,所以我们从1号到最后一个依次进行安排. 经过反复实验,发现两个规律 每一行的同学必须是从左向右依次连续放置.(这样状态表示仅仅需要每一行的人数就行了) 下一行的人数不能多余上一行 有两种思考方式: lyd思考方式: 现在已经安排好学生了,dp[a][b][c][d][e]是按照这种方法安排的总的方案数.然后往以后的情况推倒. y总思考方式: 思考怎样才能推倒到现在的情况. 时间复杂度分析: 第一排,第二…
Hay For Sale 购买干草 bzoj-1606 Usaco-2008 Dec 题目大意:约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单位的马车,去顿因家买一些干草.  顿因有H(1≤H≤5000)包干草,每一包都有它的体积Vi(l≤Vi≤C).约翰只能整包购买,他最多可以运回多少体积的干草呢? 想法:傻逼背包裸题,直接01背包即可. 最后,附上丑陋的代码... ... #include <iostream> #include &…
音量调节 bzoj-2748 HAOI-2012 题目大意:有一个初值,给你n个$\delta$值,求最后不超过给定的限制的情况下的改变的最大值.每个$\delta$值可以+也可以-. 注释:$1\le n\le 50$,$1\le 限制\le 1000$. 想法:正负背包.在背包的之后更新用两行更新,保证每一个$\delta$值都被计入了答案. 最后,附上丑陋的代码... ... #include <iostream> #include <cstdio> #include <…
AC自动机基本操作 (1) 在AC自动机中,我们首先将每一个模式串插入到Trie树中去,建立一棵Trie树,然后构建fail指针. (2) fail指针,是穿插在Trie树中各个结点之间的指针,顾名思义,就是当匹配失败的时候,用于引导p指针回溯,就和KMP算法中的next数组道理相同. #include<bits/stdc++.h> using namespace std; #define MAX 26 //字典树关键字为‘a’~‘b’ ]; //主串(文章) int n; //模式串共有n串…
KMP算法图解: ① 首先,字符串“BBC ABCDAB ABCDABCDABDE”的第一个字符与搜索词“ABCDABD”的第一个字符,进行比较.因为B与A不匹配,所以搜索词后移一位. ② 因为B与A不匹配,搜索词再往后移. ③ 就这样,直到字符串有一个字符,与搜索词的第一个字符相同为止. ④ 接着比较字符串和搜索词的下一个字符,还是相同. ⑤ 直到字符串有一个字符,与搜索词对应的字符不相同为止. 当空格与D不匹配时,你其实知道前面六个字符是“ABCDAB”.KMP算法的想法是,设法利用这个已知…
https://blog.csdn.net/myjs999/article/details/81022546…