摘要:
题目描述:为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买。请问:你用有限的资金最多能采购多少公斤粮食呢?思路裸多重背包, 本想练练倍增优化的, AC 后又没动力了代码#include #include #include using namespace std;int weight[222];int bags [222];int money [222];int dp [222];int main() { int t; scanf("%d", &t); 阅读全文
摘要:
题目描述:又到毕业季,很多大公司来学校招聘,招聘会分散在不同时间段,小明想知道自己最多能完整的参加多少个招聘会(参加一个招聘会的时候不能中断或离开)。思路算法导论贪心算法章节原题, 编程之美上也有类似题目.这种招聘会还比较简单, 招聘会本身没有权值, 假如考虑权值, 题目就变成动态规划了先对招聘会按照截止时间排序, 然后按照截止时间选取具体哪场招聘会, 时间复杂度为 O(nlogn)代码#include #include #include #include using namespace std;class Meeting {public: int st, ed; Meeting(... 阅读全文
摘要:
题目描述:在一个无权图中,两个节点间的最短距离可以看成从一个节点出发到达另一个节点至少需要经过的边的个数。同时,任意两个节点间的最短路径可能有多条,使得从一个节点出发可以有多条最短路径可以选择,并且沿着这些路径到达目标节点所经过的边的个数都是一样的。但是在图中有那么一些特殊的节点,如果去除这些点,那么从某个初始节点到某个终止节点的最短路径长度要么变长,要么这两个节点变得不连通。这些点被称为最短路径上的关键点。现给定一个无权图,以及起始节点和终止节点,要求输出该图上,这对节点间最短路径上的关键点数目。思路1. 起初把题目想简单了, 以为一遍 BFS 就能得到正解, 用案例跑了下没报错就直接提交了 阅读全文
摘要:
题目描述:大家都知道在dota游戏中,装备是对于英雄来说十分重要的要素。英雄们不仅可以购买单个的装备,甚至某些特定的装备组合能够合成更强的装备。为了简化问题,我们将每个装备对于英雄的功能抽象为一个整数:价值。同时,如上所说,一些特定的装备可以用来合成更强的装备,玩家会因此获得除原装备价值外额外的价值。给定玩家现有的金钱数,每个装备的价格和其对应的价值,以及装备合成的信息。输出,其能获得的最大价值数。注意:每件装备只能参与合成一件合成装备(即原装备参与合成后得到合成后的新装备,原装备消失),除非一次购买多个该种装备。思路1. 刚开始没看懂题目, 还以为是有依赖的背包问题, 后来看了解题报告才明白 阅读全文
摘要:
题目描述:给定一个m*m的矩阵,矩阵中每个数字都是整数。在该矩阵中找到一个大小为n*n的子矩阵,使该子矩阵中的所有元素和最小。输出该最小元素和。思路1. 简单版的最小矩阵, 矩阵被限定在正方形2. 对于子问题的求解, 几乎算不上是动态规划了, 只能说是一道模拟题3. 一个游标, 遍历第 n~m 行, 对每一行, 利用单调队列计算矩阵的和, 时间复杂度为 o(m*m)代码#include #include #include using namespace std;int matrix[200][200];int line[200];int calOneLine(int m, int n) { . 阅读全文