- 博客(20)
- 资源 (4)
- 收藏
- 关注
原创 递推式计算与矩阵乘法 C++
以斐波那契数列为例,计算斐波那契数列的矩阵方法代码如下:(快速幂、矩阵乘法)《挑战程序设计竞赛第二版》P199#include<iostream>#include<vector>using namespace std;typedef vector<int> vec;typedef vector<vec> mat;int M = 1...
2018-07-29 20:22:32 516
原创 状态压缩DP:旅行商问题
题目描述:给定一个n个顶点组成的带权有向图的距离矩阵d( i , j ) ( INF表示没有边 )。要求从顶点0出发,经过每个顶点恰好一次后再回到顶点0.问所经过的边的总权重的最小值是多少?限制条件:2 <= n <= 15 0 <= d( i , j ) <= 1000题目解析:这个问题就是著名的旅行商问题(TSP)。所有可能的路线有(n-1)!种。这是一...
2018-07-28 12:02:06 260
原创 动态规划:铺砖问题
问题描述:给定n*m的格子,每个格子被染成了黑色或者白色。现在要用1*2的砖块覆盖这些格子,要求块与块之间互相不重叠,且覆盖了所有白色的格子,但不覆盖任意一个黑色格子。求一共有多少种覆盖方法,输出方案数对M取余后的结果。限制条件:1 <= n <= 15 1 <= m <= 15 2 <= M <= 10^9样例输入:n = 3m = 3...
2018-07-28 11:18:32 4849
原创 暑假练习:uva11400(最长上升子序列)
题目链接:uva11400解析:这题的题意比较难理解,题目给出每种灯泡的电压v,电源费用k,灯泡的费用c,灯泡数量l。那么其中一种灯泡需要花的钱d[i] = l[i] * c[i] + k[i]。现在要求求出最少费用,那问题就变成了:是前i种灯泡全用灯泡i省钱,还是前i种灯泡中选不同种灯泡省钱。状态d[i]就代表了前i种灯泡中最小费用,转移方程就是min{ d[j] + (s[i] - s[j...
2018-07-22 08:41:35 268
原创 暑假练习:uva12563(01背包问题)
原题链接:uva12563解析: 这题我花了十几分钟就敲出来了,但是没通过,于是改了俩个多小时才发现少打了max....。 这题是典型的01背包问题,其中时间可以看作背包容量,每首歌就可以看作体积了,那么重量就是1。本题要求唱最多的歌的同时要尽可能唱的时间久一点。那d(i,j)表示在前i首歌中,剩余时间为t时的最多唱歌数。但是要注意的是,题目还要求输出唱歌的...
2018-07-21 19:14:11 319
原创 暑假练习:Uva437
题目链接:uva437解题思路:只有长和宽均小于下面立方体的长和宽的方块才可以放在上面。因此这是一个有序对,可以抽象成有向无环图来做。运用DAG求最长路算法来求。其中用dp[i][j]来表示第i种方块以第j种边为高时的最高高度。代码实例:#include<iostream>#include<cstring>using namespace std;stru...
2018-07-20 18:07:14 165
原创 暑假练习:上学
个人笔记,仅供复习上学【题意描述】小喵喵家附近有n个路口,m条道路连接着这些路口,而且通过这些道路各自需要一些时间c[i]。小喵喵在1号路口,他要去n号路口上学,但是他马上要迟到了,所以他想知道最短需要多长时间能够到达学校。其中忽略小喵喵由于出家门、到n号路口之后进入学校、从一条道路移动到另一条道路之类的时间,只计算他在这些道路上花费的时间总和。除此之外,小喵喵还有k个时间暂停器,每个可以...
2018-07-20 10:04:45 250
原创 暑假练习:游戏
个人笔记,仅供复习 游戏【题意描述】小喵喵喜欢玩RPG游戏。在这款游戏中,玩家有两个属性,攻击和防御,现在小喵喵的攻击和防御都是1,接下来小喵喵会依次遇到n个事件。事件有两种。1.小喵喵经过修炼,角色升级了,此时可以选择攻击+1或者防御+1.2.小喵喵遇到了一个敌人,可以选择战斗或者逃跑。如果战斗,胜利后得到a[i]金钱。如果逃跑,则无事发生,但是以后也不能再回来打这个怪物了。对于一场...
2018-07-20 09:55:00 360
原创 Floyd算法 笔记 C/C++
个人笔记,仅供复习1.适用范围:求每一对顶点之前的最短路径(适用稠密图)2.算法思想:在一般情况下,若(vi,…,vk )和( vk,…,vj )分别是从 vi 到 vk 和从 vk 到 vj 的 中间顶点的序号不大于k的最短路径,则将( vi,…, vk ,… , vj )和已经得到的从vi到vj且中间顶点的序号不大于k-1的最短路径相比较,其长度较短者便是从vi到vj的中间顶点的序号不大于k的...
2018-07-15 10:53:18 895 1
原创 Bellman-Ford 与 SPFA 算法笔记
个人笔记,仅供复习1.Bellman-Ford算法1.1 适用范围:含负权边的带权有向图的单源最短路问题。不能处理带负权边的无向图1.2 限制条件:要求图中不能包含权值总和为负值回路(负权值回路),如下图所示:1.3 算法思想:1.3.1 构造dist[k][u]:算法构造了一个最短路径长度序列dist[k][u]。其中:dist[1][u]是从源点v到终点u的只经过一条边的最短路径长度,并有di...
2018-07-15 10:29:00 2476 2
原创 Dijkstra算法 C++
个人笔记,仅供复习,整理自陈越老师的网课1.适用范围:解决无负权边的带权有向图或无向图的单源最短路问题2.算法思想:贪心思想,每次从当前结点出发走下一个权值最小的边。3.伪代码:令S={源点s + 已经确定了最短路径的顶点vi}对任一未收录的顶点v,定义dist[v]为s到v的最短路径长度,但该路径仅经过S中的顶点。即路径{s->(vi属于S)->v}的最小长度若路径是按照递增(非递减...
2018-07-15 09:19:43 516
原创 C/C++ 并查集及其优化笔记整理
个人笔记,仅供复习1.集合1.1 集合运算:交、并、补、差,判断一个元素是否属于一个集合。1.2 并查集:集合并、查某元素属于什么集合。1.3 并查集问题中集合存储的实现:用树结构表示集合,树的每一个结点代表一个元素2.对并查集的操作 2.1 查询:为了查询两个结点是否属于同一集合,我们需要沿着树向上走,来查询包含这个元素的树的根是谁。如果两个结点走到了同一个根,那么就...
2018-07-12 11:32:15 938
原创 C/C++ 哈夫曼树与哈夫曼编码
个人笔记,仅供复习1.哈夫曼树1.1 定义: 带权路径长度(WPL):设二叉树有n个叶子结点,每个叶子结点带有权值W(k),从根结点到每个叶子结点的长度为L(k),则每个叶子结点的带权路径长度之和就是:WPL = W(1)*L(1) + W(2)*L(2) + ... + W(k)*L(k) 最优二叉树或哈夫曼树:WPL最小的二叉树 如上面三棵树,第三颗的WPL最小,所...
2018-07-10 11:16:50 1777
原创 判断是否为同一颗搜索树 C/C++
1.问题描述:给定一个插入序列就可以唯一确定一颗二叉搜索树;然而,一颗给定的二叉搜索树却可以由不同的插入序列而得到。对于输入的各种插入序列,判断能否生成一样的二叉搜索树。2.求解思路:分别建两棵树的判别方法不建树的判别方法建一棵树,再判别其他序列是否与该树一致2.1 分别建两棵树的判别方法:分别建两棵树,再判别树是否一样(用递归方法实现)。2.2 不建树的判别方法: 已知给定的序列第...
2018-07-08 20:12:27 389 2
原创 C/C++ 平衡二叉树笔记(AVL树)
个人笔记,仅供复习1.概念1.1 背景:搜索树结点的不同插入次序,将导致不同深度和平均查找长度ASL1.2 平衡因子(Balance Factor,简称BF):BF(T) = h(L) - h(R),其中h(L)和h(R)分别为左、右子树高度。1.3 平衡二叉树(Balance Binary Tree)(AVL树)定义:空树任一结点左右子树高度差的绝对值不超过1,即|BF(T)|<=11.4...
2018-07-08 09:48:56 2844 1
原创 二叉搜索树笔记 C/C++
1.概念:二叉搜索树(BST,Binary Search Tree),也称二叉排序树或者二叉查找树。1.1 性质:一颗二叉树,可以为空;如果不为空,满足以下性质:非空左子树的所有键值小于根结点的键值非空右子树的所有键值大于根节点的键值左右子树都是二叉搜索树1.2 举例说明:2.二叉搜索树的查找2.1 思路:查找从根节点开始,如果树为空,则返回NULL若搜索树非空,则根节点关键字和X进行比较,并进行...
2018-07-07 21:09:08 9201
原创 如何从C快速过渡到C++
1.C和C++的区别:C语言可以在C++编译器上完美运行,即C属于C++C++比C多出来一些函数库C++是面向对象编程(即有class以及相关工具)2.如何从C过渡到C++2.1 代码实例:(C语言版)uva11000.#include<stdio.h>int main(){ long long m = 0, fm = 1, sum = 1; int n,i; while(s...
2018-07-03 17:35:31 22118 7
原创 C/C++ 子集生成算法整理
个人笔记,仅供复习1.概念:给定一个集合,枚举所有可能的子集。2.常用算法增量构造法位向量法二进制法3.增量构造法3.1 思路:一次选出一个元素放到集合中。3.2 代码实例:void print_subset(int n,int *A,int cur){ for(int i = 0;i < cur;i++) cout << A[i] << " ";//打印当前子集 ...
2018-07-03 13:56:25 7869
原创 C++ 求枚举排列的两种方法
枚举排列常用的方法有两种:一是递归枚举,二是用STL中的next_permutation。1.枚举递归:2.next_permutation: 头文件:#include<algorithm> 原型:bool next_permutation(iterator begin,iterator end);已排好序的数组每次调用在原数组进行下一次排列如果当前序列不存在下一个排列时,...
2018-07-02 22:56:33 17396
原创 uva1600 Patrol Robot(不同的BFS最短路)
uva1600 原题链接:https://vjudge.net/problem/UVA-1600解析: 这题很明显用BFS最短路来做(当然也有其他方法)。但是这题的BFS略有不同,和普通BFS(以下普通BFS均为此意)最大的区别在于:普通BFS能走的路是通路,一个子节点只能属于一个父节点,而本题可以跨越障碍。也就是说,走已经走过的点也可能是最优解(普通BFS走已经走过的点必然不是最优...
2018-07-02 21:00:09 7979 1
哈夫曼编码译码器-数据结构实训
2019-01-13
算法导论 PDF
2018-08-21
教职工信息管理系统-结课作业C++
2018-06-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人