自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (1)
  • 收藏
  • 关注

原创 状态压缩动态规划—(附luogu官方题单解法

状态压缩动态规划—(附luogu官方题单解法状态压缩,即将状态通过二进制存储,以将一个复杂的状态仅仅用一个int数字表示。在动态规划中,有着很多状态的转化,面对一些不是那么复杂的题目,我们很容易使用一维数组二维数组或三维数组的下标来存储状态,但是如果状态很复杂有着三维甚至三维以上,再仅仅使用数组下表存储就有些不合适了,下面是luogu状态压缩及动态规划官方题单题单链接由简到难列出了几道状态压缩动态规划题的解法及思路一、P1433P1433 这道题一开始看是没什么思路的,有点复杂,对着别人题

2021-09-15 16:16:45 207

原创 基于RMI和Socket的Java聊天软件

Java期末大作业,总算肝完了。这学期才开始接触Java,比起C语言java用起来不要太舒服。期末大作业就想着做一个能用的东西出来,于是就选了这个,经过小组成员的努力,最终还是把这玩意儿弄出来了。服务器端:采用RMI和Socket实现服务器端与客户端通信关于RMI提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录服务器端:前言一、功能介绍及环境二、服务器端1.RMI2.Socket3.数据库4.基本逻辑三、客户端四、部署到服务器总结前言java大作业总算肝完了。这一路

2021-06-15 15:35:01 1974 7

原创 java基础(1) 基本数据类型与语法

java基础(1) 基本数据类型与语法标识符用来标识类名、变量名、方法名、类型名、数组名以及文件名的有效字符序列。由字母、下划线、美元符号和数字组成,长度不限制第一个字符不能为数字不能是关键字,以及常量(null,true,false)标识符的命名最好是要有意义的,这在后面的编码过程中会很重要。基本数据类型基本数据类型也称简单数据类型,java中共有八种基本数据类型数据类型介绍及注意点boolean逻辑数据类型;可以取true,falseint整型;四个字

2021-04-28 16:38:07 114

原创 java基础知识

java基础知识文章目录java基础知识static静态代码块 非静态代码块:相同点不同点静态代码块封装含义必要性访问控制修饰符Java类的访问级别继承定义类的继承基类和派生类的关系格式子类构造函数super关键字this关键字变量名隐藏方法覆盖向上转型protected的使用关于访问权限多态关键字abstract抽象类的继承多态接口接口接口回调接口间关系内部类与异常类内部类内部类和外嵌类间的关系其他匿名类特点匿名类与接口异常类try-catch 语句自定义异常类断言语法启动与关闭断言语句finally语

2021-04-21 15:08:15 137 1

原创 Linux 文本处理awk中的坑?

Linux 文本处理awk中的坑最近做题时发现了awk,一下子就被它吸引到了,没错,它能够格式化处理字符串。但是网上很少有文档有具体的列出它的不同之处的,因此,在使用的过程中踩了不少坑。AWK 是一种处理文本文件的语言,是一个强大的文本分析工具语法awk [options]'{actions}' awk能够逐行处理文本,同时在actions部分处理后,能够直接输出到标准输出。但是,这个过程有不少坑,那就是 actions 部分脚本语句,与shell语句的语法有很大一部分不相同。比如像C

2021-04-18 20:11:22 135

原创 Qt 读写xls文件(并将数据转为c风格

参考文章:读写XLS文件找了好久xls的读取库啥的,就这个比较好用。解决了出现的几个问题,并进一步封装。定义的类pro文件中加入 CONFIG += qaxcontainerQtExcel//xls文件类,读写都定义在这里PathGet//定义了一个文件读取原代码中,只要打开文件必会保存,由此会引发错误,因此在原代码上进行了一系列修改,仅仅再写入后需要保存。ps:保存时会询问是否替代原文件,一定要选择是,否则会有错误。QtExcel中原作者定义了两种读取数据方法,但是我只使用过其中了其中的

2021-04-13 21:18:04 849

原创 java:java运行文件时错误:找不到或无法加载主类

可能的错误原因:java源文件首行中有package ...即指定该文件属于某某包:例如:package tmp.test即该文件属于tmp.test包此时 源文件应存在…/tmp/test中(若不在自行创建文件夹需在命令行中用cd退到tmp的父目录中,再用java tmp/test/文件名即可运行...

2021-03-09 19:15:45 142

原创 AC自动机

Ac自动机就是在一个字符串中,查找多个给出多个模式串,查找匹配。多次kmp字符串匹配?在给出模式串数目特别大的情况下,即便是kmp也运行不了,因此,我们这里有了ac自动机,即在tire上kmp,只需遍历一遍原字符串就能找出所有匹配。tire树又称字典树,利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较 详解(我们需要在trie上kmp。首先是建立一个...

2020-12-25 11:56:19 117 2

原创 字典树 Trie

字典树 目录 原理例子结论具体实现原理字典树又称前缀树,当我们要存储多个字符串时,若每段字符串单独存储,则查找以及空间效率都很低。有一些字符串是另一些的前缀,或者两个字符串的前缀有重合,利用这一性质,我们建一个字典树,又叫前缀树,前缀相同的字符串前缀相同部分都只会被存储一次例子有字符串 a,ab ,acd,bc;对于每个插入的字符串,首先从根节点出发,查找是否有匹配的子节点 如插入 "ab"时,首先在 root节点查找是否有 值为’a’的子节点,若没有,则直接插入。再对该节点进行如第一步操

2020-12-25 11:16:19 82

原创 P2440 木材加工————二分答案

P2440 木材加工一题二分答案,但是又有不同,我们之前要求的是求给定切割的数目求最大值,这里要求的是,给定最小切割次数,求最大值。因此我们只需要在二分的地方修改一下。易知:小于l的值都满足,因此,最后输出r即可。#include<stdio.h>#include<stdlib.h>#define size 1000050int all[size];int main() { int n, k, i; int l = 1, r = 1; scanf("%d%d",

2020-12-23 10:14:41 290

原创 c++优先队列 自写比较函数 详解

c++优先队列官方文档在c++中优先队列,有自己的库包含在头文件queue里template <class T, class Container = vector<T>, class Compare = less<typename Container::value_type> > class priority_queue;第一个元素是元素类型,可以为自己定义的,或者基本数据类型。第二个是容器数据类型,默认是vector。第三个是比较函数,默认调用 &lt

2020-12-21 15:45:38 1811 1

原创 P1233 木棍加工————洛谷 动态规划

P1233 木棍加工这道题要求,寻找的x,y,递减链的最少数目。由于没有排序,先按照x排个序(x相等时,按照y排序)这样就能由二维降到一维。这样问题就变成,在排好序的序列中,寻找按照y递减的链的最少数目。这里有一个定理,对于一个偏序问题,它的最少递增链的数目,等于最长递减子序列的长度。于是题目就变成了寻找最长递增子序列。还不会?动态规划————模板最长递增/公共子序列#include<stdio.h>#include<stdlib.h>#define size 500

2020-12-20 16:29:21 310

原创 动态规划————模板最长递增/公共子序列

P1439 【模板】最长公共子序列先来说说最长递增子序列的解法,最长递增子序列,即一个序列中递增序列最大长度。对于长度为 n 的序列,它的最长递增子序列有三种情况长度为n-1的前缀的最长子序列 加上再加上最后一个元素长度为n-1的前缀的最长子序列长度为n-1的前缀的最长子序列的最后一个元素替换为最后一个元素前两点易于理解,最后一点即为寻找最优子结构的贪心过程。对于长度相同的递增序列,我们当然是要最后一个元素的值越小越好。因此,我们可以从长度为1的序列开始,每次插入一个元素,更新长度为k

2020-12-19 11:18:16 120 1

原创 计数排序思想附练习题

计数排序其实算不上严格意义上的排序,它对数据的范围有着要求。—————————————————————所谓计数排序,即记录下每个元素出现的次数,这里就有一个问题,即使用数组存的话就只能统计一定范围的数字,同时若果数组开的太大,遍历一遍也会超时。因此,计数排序更多的是一种基本思想,(对数字取模再存————哈希?)这里有一道计数排序的题,当然用快排什么的也都可以过P1271 【深基9.例1】选举学生会#include<stdio.h>#include<stdlib.h>#d

2020-12-19 09:58:14 386 1

原创 P1966 火柴排队————洛谷 动态规划

P1966 火柴排队这一题可以看成是逆序对问题的应用(逆序对问题)首先,我们可以知道当所有高度最小的时候,有两个序列中第k大的元素刚好配对,这里就不给出证明了。然后呢,我们通过对下标(将下标所对应的值作为关键字)的排序,再分别将两个数组的下标匹配,,其中的逆序对个数极为所求的最小的移动次数。#include<stdio.h>#include<stdlib.h>#define size 500005int mod = 1e8 - 3;int tmp[size], a

2020-12-17 17:09:02 183

原创 逆序对个数问题————分治(超简短代码)

P1908 逆序对逆序对:在一个元素序列中有,a[i]>a[j],而i<j,则称这两个元素为一个逆序对。逆序对使用分治的方法解决,相当于是进行一次递归排序(不懂的点这里),因此时间复杂度为o(nlogn)。在对一个序列两个已排好序的子序列进行合并时,有两种情况再这里用a[i],a[j]分别表示两个序列中的元素,l,mid,r 表示序列原序列最左,中间,最右下标。a[i]<=a[j],则待加入元素,与未加入元素之间没有逆序对。a[i]>a[j],则a[j]加入序列,a[j

2020-12-17 16:06:04 1830

原创 KMP算法代码模板,c语言实现,附有题目

网上有很多kmp算法的博客,看了好久都没有弄懂,于是就自己写一篇。首先我们需要明确几个定义:前缀:字符串前面的一段后缀:字符串后面的一段kmp算法思想:寻找一个字符串的,前缀与后缀的最大匹配,该前缀后缀不能为它自身。在朴素字符串匹配中,若某一点不匹配,则需要从头开始,这中间会做了有很多不必要的工作。我们找到已匹配字符串段的后缀的最大前缀匹配,再将该前缀作为已匹配字符串往后遍历。由于找到的是后缀的最大前缀匹配,因此可以保证不会有遗漏。#include<stdio.h>#inclu

2020-12-13 10:38:20 222

原创 链式前向星原理以及具体实现(看这一篇就够了!!!)

链式前向星是什么?图的一种存储方式。有什么用?简化版的邻接链表的存储。链式前向星就是存储图中的每条边,但是,有几个额外的数组,可以用于在很短时间内查找(**类似邻接表)**到以某一点为起点的边。那么为什么要这个写这个呢?他简单啊。对,就是这样。————————————————————首先,我们需要两个数组edge,var(当然你也可以用结构体)来分别存新加入边的权重和终点。同时为了能够遍历以某一节为起点的所有边,我们还需要两个数组~~(精髓来了)~~ ,next[i],head[i],分别用来存储

2020-12-12 17:01:15 685

原创 Bellman Ford

可以有负环。遍历每一条边n-1次,同时更新dis(若无负环则最短路径长度不超过n-1)#include<stdio.h>#include<stdlib.h>#define size 100000#define sup 0Xffffff0struct edge { int u; int v; int w;};typedef struct edge edge;//边edge all[size];int cnt, dis[size];void insert(in

2020-12-09 11:55:40 67

原创 背包问题模板 组合背包(普通背包问题,完全背包,多重背包)

背包问题大部分都是模板题,这里整理了组合背包的模板。组合背包:物品的可取数目为1,有限个或无限个。也就是说该模板适用于01背包,完全背包,多重背包———————————————————————对于可取数目不为一的处理思路:我们将该物品的数目,分解成几个2的幂次的和1,2,4……, 多余出来的也放进去,再将这些数乘以原价值,原重量,单作不同的物品加进去。为什么要这么做呢?假设我们当我们取k件该物品时,k同样可以看成分解出来的数的组合。然后就是普通背包的思路了。#include<stdio.h

2020-12-09 11:22:00 699

原创 Dijisktra 算法————邻接表实现、邻接矩阵实现、以及堆优化

Dijisktra算法用于求单源最短路径,对图的要求有:(1)无负环(否则求出的结果为负无穷)算法思路:将顶点集分成两部分S、V-S,S为已经找到到源点最短路的顶点集合。1.将源点插入S,到自身距离为0;2.遍历刚插入节点的所有边,更新V-S中顶点到源点的距离;3.在V-S中找到距源点最短的结点,插入S,回到第2步。若未找到1.结点遍历完2.若距离都为设置的极大值,则这些源点没到这些结点没有路径。C语言实现(有向图)1. 邻接表实现#include<stdio.h>#inc

2020-11-27 11:03:11 1265

原创 P2196 挖地雷————动态规划(洛谷)

P2196#include<stdio.h>#include<stdlib.h>#define MaxSize 25int way[MaxSize][MaxSize],dp[MaxSize][MaxSize],root[MaxSize][MaxSize];void print(int a,int b);void find(int n ,int *all){ int i,j,k,l,tmp,tmpi,tmpj; for(i=1;i<=n;i++){ dp[i]

2020-11-16 19:58:18 268

原创 P1049 装箱问题

P1049 装箱问题背包问题。模板题。标记每个可能的重量。#include<stdio.h>#include<stdlib.h>#define size 100int v[size], w[size], sum[30005];void find(int n, int m) { int i, j, k; sum[0] = 1; for (i = 0; i < m; i++) { for (j = n; j >= v[i]; j--) { if (

2020-11-16 19:47:44 85

原创 P1833 樱花(洛谷)——————动态规划

P1833 樱花多重背包问题,(每一个物品数目有限)数据量较大,因此使用二进制优化即可过。#include<stdio.h>#include<stdlib.h>int v[200000],w[200000],c[1005];void find(int n,int t){ int i,j,k; for(i=0;i<n;i++){ for(j=t;j>=w[i];j--){ c[j]=c[j]>c[j-w[i]]+v[i]?c[j]:c[j-w[

2020-11-16 19:43:45 160

原创 P1564 膜拜(洛谷)——————动态规划

P1564 膜拜这一题使用递归求解,考虑一个区间[i,j],若从i到j可分在一个机房,则直接返回,否则,遍历每一个点k,若[i,k]可分在一个机房,则求[k+1,j]分组的数目最小值。求解过程中,已求的区间会被存储起来。(这里固定n)#include<stdio.h>#include<stdlib.h>#include<math.h>#define size 2505#define max 9999int a[size], b[size], cnt[siz

2020-11-16 19:38:58 107

原创 P1077 摆花(洛谷)——————动态规划

P1077 摆花模板题。对于没一盆花遍历从n到1的每一个花的总数,再对摆放该花的盆数k进行遍历。状态转移方程为cnt[j]+=cnt[j-k]#include<stdio.h>#include<stdlib.h>#define size 150int a[size], cnt[size];void find(int n, int m) { int i, j, k; cnt[0] = 1; for (i = 0; i < n; i++) { for (j

2020-11-16 19:29:07 76

原创 P1507 NASA的食物计划(洛谷)————动态规划

P1507 二重背包问题,模板题;三重循环分别遍历每一件物品,每一个体积,每一个重量#include<stdio.h>#include<stdlib.h>#define size 405int carol[size][size],w[size],v[size],ca[size];void find(int va,int mm,int n){ int i,j,k,tmp; for(i=0;i<n;i++){ for(j=va;j>=v[i];j--){

2020-11-15 21:50:39 181 1

原创 P1359 租用游艇————动态规划

P1359思路:从1到n的最短路径?有向图?不妨考虑先从1到i,再考虑从i到n的最短路径。因此自底向上,从n-1到n的最短路径开始计算。ac代码:#include<stdio.h>#include<stdlib.h>#define size 205 #define max 9999999int r[size][size];void find(int n){ int i,j,k; for(i=n-1;i>=1;i--){ for(j=i+1;j<=n

2020-11-14 10:54:58 168

原创 钢条切割————算法导论

给定长度任意长度的钢条的价值,求解如何切割,使给定长度为n的钢条的价值最大。对于长度为n的钢条,考虑子问题,我们遍历1~n的第一个切割的位置j,即得到长度为j和n-j的两段钢条,第一段不再切割,仅对第二段继续切割,递归求解,于是就得到了一个递归解法。这里是C语言实现#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#define min -999999#define maxsize 9999

2020-11-14 10:20:25 211

原创 P1044 栈(洛谷)————动态规划

P1044 #include<stdio.h>#include<stdlib.h>#define Max_N 30int dp[Max_N][Max_N];//i待排元素数目,j栈中元素 ,输出序列可能 int Recursion_Find(int i,int j){//递归查找 if(dp[i][j])return dp[i][j];//若dp[i][j]已存在则直接输出 if(j>0) dp[i][j]+=Recursion_Find(i-1,j+1)+

2020-10-30 21:38:34 369

原创 矩阵链乘法(最优解)————算法导论(C语言实现)

这两天算法课刚学了这个,于是就想着用C语言自己撸出来首先是寻找最优解的过程,对于下标从i到j的矩阵链,我们将其分成两部分i到k和k+1到j,遍历每一个k,找到最小值即可。因此我们需要从下往上遍历矩阵链长度。这里是c代码#include<stdio.h>#include<stdlib.h>#define maxSize 1000#define maxNum 100000000int dp[maxSize][maxSize];//从i到j相乘所需要的最少计算次数 in

2020-10-29 11:19:48 2142

原创 堆排序及优先队列

堆排序的时间复杂度为o(nlogn)不需要额外空间堆可以看成一个存储在数组中的近似完全二叉树结构。下标为(0…n)父节点下标为p则左孩子下标为2p+1,右孩子下标为2p+2。其中在最大(小)堆中,父节点比两个孩子节点大(小)。在这里仅讨论最大堆。对堆的操作:void MaxHeapify(int *numSequence ,int i,int lenth);//最大堆的维护 void Build_MaxHeap(int *numSequence,int lenth);//建造最大堆 void

2020-10-27 12:44:22 160

原创 快速排序手写优化版本(防特殊数据)————o(nlogn)寻找第k大数

快速排序:快速排序相较于其他排序算法是最快的,因为无论是最好情况还是最差情况,在优化后时间复杂度都能达到o(nlogn),而且不需要额外的空间,唯一的缺点就是不是稳定的。原理:对于给定的待排序的序列,任取一个元素作为基准数,再将当前序列中小于该数的放到前面,大于该数的放到该数后面,找到该数的位置,最后递归求解两子序列。C语言实现:int cmp(int element1,int element2){//比较 return element1-element2;}void swap(size_t

2020-10-22 22:03:37 165 1

原创 常用排序与查找(更新中)

排序与查找:文章还在手打中敬请期待…如有谬误还请指正排序:时间复杂度o(n^2)冒泡,选择,插入排序时间复杂度o(nlogn)归并排序

2020-10-22 19:41:35 53

原创 归并排序————o(nlogn)

归并排序:与选择排序等相比,归并排序的时间复杂度是o(nlogn),且是稳定的。原理:将所排序序列分成两个子序列,递归调用函数将子序列排好序后,再合并。不足:需要一个额外的数组用于合并,造成空间的浪费。C语言实现int extraArry[100000];int cmp(int element1,int element2){//比较 return element1-element2;}void Merge_Sort(int *numSequence,int start,int end){

2020-10-22 19:29:35 407

原创 冒泡排序,选择排序,插入排序————o(n^2)

之所以将这三种排序放在一起,是因为从本质上来讲,三种排序都是相同的,时间复杂度都为o(n^2),且都是稳定的(关键字相同的元素之间在排序后仍保持原有相对顺序)。在这里对一个长度为n(下标从0 到n)的可排序序列进行排序。在这里以对一个存放整形的数组为例(C语言)。函数有:int cmp(element1 ,element2);void swap(element1,element2);int cmp(int element1,int element2){//比较 return element1

2020-10-20 21:31:51 145

基于RMI和Socket的带数据库的java聊天软件 客户端和服务器端

Java聊天室 服务器端和客户端都有,可实现多人和单人聊天,同时用户不在线时收到的消息会被存储到数据库,代码可拓展性强

2021-06-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除