![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法竞赛入门经典-刘汝佳 ---读后实现
当幸福来敲门1
仲夏夜,星之空, 年少轻狂挽如风
展开
-
黑白图像--读后实现
读完书中的代码,感觉真是设计的巧妙,于是赶紧写下#includeint mat[8][8] = { //存储的是图,其中1代表着黑格,0代表着白格,为了省略越界的检查,整整多//加了一圈的0 {0,0,0,0,0,0,0,0},{0,1,0,0,1,0,0,0},{0,0,0,1,0,1,0,0},{0,0,0,0,0,0,0,0},{0,1,1,0,0,0,0,0},{0,1,1原创 2016-07-23 07:54:31 · 266 阅读 · 0 评论 -
旅行 -----Tour
uva 1347 这道题,我并没有完全的理解,只是将书中的思想梳理了一下,将代码重敲了一下,做个记录,以后加深记忆import java.util.Scanner;public class uva1347 { private static int maxn = 50 + 5; //节点的最大数量 为什么加5 private static double []x = new do原创 2017-03-29 20:42:18 · 209 阅读 · 0 评论 -
Huffman树
先说下重要的概念(数据结构--严蔚敏): 路径长度:树中一个节点到另一个节点之间的分支构成这两个节点之间的路径,路径上的分支的数目称作路径长度。树的路径长度:是从树根到每一个节点的路径长度之和节点的带权路径长度为:从该节点到树根之间的路径长度与节点上权的乘积树的带权路径长度(WPL):为树中所有叶子节点的带权路径长度之和Huffman树,又称最优树,是一类带权路径长度最短的树。原创 2017-03-13 16:48:44 · 165 阅读 · 0 评论 -
硬币问题
算法竞赛入门,p262:原创 2017-03-14 12:47:12 · 333 阅读 · 0 评论 -
uva10570---外星人聚会(meeting with aliens)
这道题刚开始做的时间没有思路,后来看了别人的思路后,写了自己的代码。举例介绍:有向环比如一组数据{5,4,3,2,1}; 如果按照正向排序,各个位置的下标为1,2,3,4,5,那么有向环为{5,1}{4,2}{3}一个3个。思路:其实本道题就是找有向环,假如说有向环的数量为m,则需要交换的次数就为Array.size - m.同时本道题应该分为顺时针编号和逆时针编号,分别假定各个位置为原创 2017-03-30 17:58:29 · 470 阅读 · 0 评论 -
最长上升子序列问题(LIS)
问题方法状态转移方程: 需要注意的是: 当完全逆序的情况下,每个 dp(i) = 1代码#include<iostream>using namespace std;int data[] = {1,6,2,3,7,5};int record[6];int max(int a, int b) { return a > b? a:b;}int main() { int l原创 2017-12-12 16:57:44 · 214 阅读 · 0 评论 -
数字三角形问题
问题描述状态转移方程代码实现方法1:效率低下#include<iostream> #include<string.h>#define maxn 1000 + 5using namespace std;int a[maxn][maxn];int d[maxn][maxn];int n;int D (int i, int j) { return a[i][j] + (i ==原创 2017-12-07 11:00:59 · 194 阅读 · 0 评论 -
扩展欧几里德算法
遇见这道题,对求最大公约数又有了新的认识欧几里得问题int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a%b);}扩展欧几里得问题对于ax + by = c; 在 c % gcd(a,b) = 0的时候,我们一般先求 a/gcd(a,b) x + b/gcd(原创 2017-12-07 21:25:22 · 118 阅读 · 0 评论 -
矩形嵌套
DAG: Directed Acyclic Graph 有向无环图 在这道题中,重点有以下几点:1.首先是建图,如何把矩形的嵌套关系保存到图中2.图的遍历,求根节点到叶子的最长路径3.在写dp的时候,要注意的是对每一个根节点的叶子节点,返回的是这些叶子及中的最长路径4.每次遍历完一个叶子,要将高度high返回到初始状态public class Destination{原创 2017-03-13 11:40:03 · 251 阅读 · 0 评论 -
已知中序+后序 写树
我们经常遇到已知树的两种遍历的顺序,让我们写出原来的树这样的题目,今天我也遇到了,就索性写了下:普及: 前序+后序!=树 前序+中序 = 树 中序 + 后序 = 树注:= :表示能写出树, !=表示不能写出树//本算法的思想要从递归说起,已知中序+后序,那么我们构造树的过程是这样的://从后序中找到根,然后在中序中找到根元素,辨别出左右子树以及左右子树的数量//用左右原创 2016-09-19 22:58:17 · 227 阅读 · 0 评论 -
生成1-n的排列
早就对生成1-n的排列感兴趣,可是始终不知道怎么写。今天见刘汝佳老师的书中有这样的代码,于是就开始研究。可是因为我道行浅的原因,结合老师书中所说去理解代码开始始终不理解。但是,看了多遍,当我以我自己的方式理解代码的时候,我也懂了老师所说的了,好了不说了。。。。#includevoid print_permutation(int n, int* A , int cur);int flag =原创 2016-07-24 18:14:51 · 1301 阅读 · 0 评论 -
小球下落
小球下落原创 2016-07-25 18:56:09 · 393 阅读 · 0 评论 -
除法
#includevoid per(int *a, int n, int cur); //求全排列函数 int flag = 0;int m = 6;void cal(int *b); //检验除数和被除数各个为上的数字是否刚好是0-9 int main(){ int a[10]; for (int i=0; i<10; i++) a[i] = 0; per(a,10,0);原创 2016-07-26 07:41:01 · 253 阅读 · 0 评论 -
分数拆分
//这道题主要的考察点在于确定一个变量的范围进而进行枚举//同时我认为比较浮点数的效率是比较低的,我们应该避免进行浮点数的比较//题中的公式: 1/k = 1/x+1/y #includeint main(){ int k,y; float x; scanf("%d",&k); for (y =k+1; y<=2*k; y++){ x = k*y / (y-k); if (原创 2016-07-27 07:35:34 · 399 阅读 · 0 评论 -
看图写树(6-17)读后实现
这道题的dfs不是那么的明显,但是这道题让我对递归有了新的认识,凡是结构一样的数据, 当我们处理的时候,首先想到的是递归#include#include#includeusing namespace std;const int maxn = 210;char buf[maxn][maxn];int n; //数组的总行数 int main(){ int T;//存储的是测试用原创 2016-09-04 21:38:30 · 319 阅读 · 0 评论 -
素数环
昨天晚上,突然想读刘汝佳老师书中的例题,素数环,但是突然自己就有了思路,于是便自己实现了一下。但是,由于昨晚时间比较晚,程序是写完了,但是没调试出来,今天一大早就开始调试,花了半小时终于调试出来了,好开心!中心思想是:回溯上代码:#include#includeusing namespace std;int visit[17]; //注意0号位置的存储位置不使用 int m;原创 2016-09-17 10:24:08 · 292 阅读 · 0 评论 -
八皇后问题--回溯
在刘汝佳老师的书中对于8皇后问题的分析(我感觉非常经典):一共有3种思考的出发点:从64个格子中选一个子集,使得"子集中恰好有8个格子,且任意两个选出的格子都不在同一行,同一列或同一对角线上",这正是子集的枚举问题。然而,64个格子的子集有2^64 个,太大了,这并不是一个很好的模型从64个格子中选8个格子,这是组合生成问题。根据组合数学,有原创 2016-09-17 22:05:04 · 1208 阅读 · 0 评论 -
子集生成
1.增量构造法看下面的代码,只用记住一句话: 一次选出一个元素放到集合中#includeusing namespace std;int A[10] ;void print_subset(int n,int *A,int cur);int count ;int main(){ print_subset(10,A,0); cout << count;}void print原创 2016-09-18 21:30:32 · 237 阅读 · 0 评论 -
无关元素
唯一分解定理算术基本定理,又称为正整数的唯一分解定理,即:每个大于1的自然数均可写为质数的积,而且这些素因子按大小排列之后,写法仅有一种方式。(这个定理真的是有趣)问题知识补充:C(k, n) = (n - k +1) / k * C(k-1, n);思路首先将m利用 分解唯一定理 分解成 质数指数的连乘形式, 然后对于补充知识的公式,从C(1 , n) 算起,一次检测是否 C(k, n原创 2017-12-07 23:24:54 · 241 阅读 · 0 评论