- 博客(40)
- 收藏
- 关注
原创 P1107 [BJWC2008]雷涛的小猫
一、题目[BJWC2008]雷涛的小猫题目背景原最大整数参见 P1012题目描述雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的)。在他的照顾下,小猫很快恢复了健康,并且愈发的活泼可爱了。可是有一天,雷涛下课回到寝室,却发现小猫不见了!经过一番寻找,才发现她正趴在阳台上对窗外的柿子树发呆…在北京大学的校园里,有许多柿子树,在雷涛所在的宿舍楼前,就有 NNN 棵。并且这 NNN 棵柿子树每棵的高度都是 HHH。冬天的寒冷渐渐笼罩了大地,树
2022-05-31 08:42:55
326
原创 P1209修理牛棚
一、题目[USACO1.3]修理牛棚 Barn Repair题目描述在一个月黑风高的暴风雨夜,Farmer John 的牛棚的屋顶、门被吹飞了 好在许多牛正在度假,所以牛棚没有住满。牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜。有些牛棚里有牛,有些没有。 所有的牛棚有相同的宽度。自门遗失以后,Farmer John 必须尽快在牛棚之前竖立起新的木板。他的新木材供应商将会供应他任何他想要的长度,但是吝啬的供应商只能提供有限数目的木板。 Farmer John 想将他购买的木板总长度减到最少。给
2022-05-25 20:05:33
365
原创 P1195口袋的天空
一、题目口袋的天空题目背景小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空。有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖。题目描述给你云朵的个数 NNN,再给你 MMM 个关系,表示哪些云朵可以连在一起。现在小杉要把所有云朵连成 KKK 个棉花糖,一个棉花糖最少要用掉一朵云,小杉想知道他怎么连,花费的代价最小。输入格式第一行有三个数 N,M,KN,M,KN,M,K。接下来 MMM 行每行三个数 X,Y,LX,Y,LX,Y,L,表示XXX云和 YYY 云可以通过
2022-05-24 21:10:55
306
原创 P1194买礼物
一、题目买礼物题目描述又到了一年一度的明明生日了,明明想要买 BBB 样东西,巧的是,这 BBB 样东西价格都是 AAA 元。但是,商店老板说最近有促销活动,也就是:如果你买了第 III 样东西,再买第 JJJ 样,那么就可以只花 KI,JK_{I,J}KI,J 元,更巧的是,KI,JK_{I,J}KI,J 竟然等于 KJ,IK_{J,I}KJ,I。现在明明想知道,他最少要花多少钱。输入格式第一行两个整数,A,BA,BA,B。接下来 BBB 行,每行 BBB 个数,第 III 行第
2022-05-24 10:29:06
258
原创 P1180 驾车旅游
一、题目二、解题思路1.这道题题目描述仍有错,唉!心累!问题有二:(1)并不是仅在第一个停下的加油站加满油,而是只要去油站加油就会把油加满;(2)收钱不需要四舍五入,只需要在输出的时候四舍五入精确到0.1,如果之前就四舍五入的话,只能拿70分。2.抱着去暴力的心态试试,没想到直接AC了。思路也很简单,只需要使用深搜找到所有可能解,然后选择花钱最少的即可。需要注意的是,题目中规则1的意思是,当油箱中的油少于一半的时候,可以选择加或者不加;那么我们只需要在能加油的地方挨个尝试加或者不加即可。三、代码
2022-05-19 21:54:14
303
原创 P1172 安全逃离
一、题目二、解题思路1.这道题是真的坑,题目描述是错的。有三处错误:(1)输入数据中存在除数字以外的无用字符串;(2)当删除一头牛可以变安全时,不需要输出1;(3)不是输出编号最小的牛,而是按序输出所有满足要求的奶牛。2.看题目一定要认真,刚开始我把这道题想的复杂了,以为奶牛每次都可以向北或者向东,那样每头奶牛的路线很多,需要深搜,但实际上,这道题奶牛只有两条路线,一路向北或者向东。3.问题的规模很小,用暴力也可以解决。这里提供一个非暴力的思路:首先查看所有的奶牛是否可以安全逃离,如果不能逃离的,
2022-05-18 14:55:33
245
原创 P1160 队列安排
一、题目二、解题思路由于该题每步都为插入,因此为明显的链表题。由于不想写链表,首先尝试使用数组去求解:直接记录每位同学的位置,插入情况就两种,插在邻居的左边或者右边;当插在邻居左边时,新插入同学的位置为邻居的位置,然后邻居及站在该邻居后面的同学位置全都加一,而插在邻居右边时,新插入同学的位置为邻居的位置+1,该邻居后面的同学同样位置全都加一。很遗憾,超时!只能写链表了。由于担心超时,我采用了空间换时间的策略,使用双链表存储整个队列。对于每个同学,我们只需要记录其左右邻居是谁,当知道队头或者队尾时,
2022-05-14 09:03:53
162
原创 P1159 排行榜
一、题目二、解题思路1.读懂题目以后,会发现题目似乎不难,直接想到,设置三个列表,分别保存UP、DOWN和SAME的歌曲,把UP的数组放在结果的后面,然后把DOWN的结果放在前面。2.开始以为会有坑,抱着试试的态度提交,结果直接AC三、代码#include<iostream>#include<string>#include<vector>#include<map>#include<algorithm>#include<c
2022-05-13 19:47:44
205
原创 P1142 轰炸
一、题目二、解题思路两点确定一条直线。而判断一个点是否在一条直线上,除了计算我没想到有何简单的办法,所以我决定采用暴力做法,找到所有可能的直线,然后再判断有多少个点落在该条直线上。在暴力的时候,首先想到,选择点1和点4与选择点4和点1形成的直线上一样的,这样我们可以将暴力的规模缩小一半,但还是会超时。接着想到在一条直线上的点,我们只需要选择一次就够了。比如,假设点1,2,4,6,8位于同一条直线上,那么在这5个点中,任取2个点形成的直线是一样的,所以我们可以将位于同一条直线上的点进行记录,只计算
2022-05-07 20:54:10
393
原创 P1135 奇怪的电梯
一、题目二、解题思路看到该题,我第一反应是使用动态规划进行求解,但是在分析题目的时候发现,该电梯不同于生活中的电梯:想去几层就去几层,而是去的地方是固定的。那么很容易想到,整个电梯的运行情况实际上可以看做是一张图,因此,该题的求解应该与图有关,而不是动态规划。题目要求计算A楼到B楼最少要按几次按钮(实际上是需要中转几次。不考虑按开和关按钮)。当构建好图时,该问题可以转化为B的几阶邻居是A,很容易想到使用层次遍历法进行问题的求解。有两处细节需要注意:(1) 在构建图时,我们构建的是有向图,而非无向
2022-05-06 16:50:04
344
原创 P1123 取数游戏
一、题目二、解题思路题目中矩阵的最大规模只有6×6,而T的数值也不超过200,看到规模比较小,想到可以尝试用暴力法进行求解。如果是我们自己来做,为了找全所有情况,一定是从小到大按序进行数的选择,所以我们在暴力求解时,也可以采用该种思路,这样可以防止重复计算。以5×5的矩阵为例,编号如下图:我们采用深搜的方法逐个进行数的选择。假如我们没有规定从小到大进行数的选择,那么将会出现如下情况:假设我们第一个选择的数是5,那么采用深搜时,1-3都可以作为下一次的选择,但这样会造成重复计算,因为此时的情况与
2022-05-05 15:47:45
259
原创 P1122 最大子树和
一、题目二、解题思路对于该题,我首先把它当成了图的问题,结果没找到突破口。后来看到题目:最大子树和以及关键字:未修建时每朵花不孤立、N个节点N-1条边,意味着这是一颗最小生成树,于是选择将该问题当成树的问题。既然是树的问题,那么意味着我们需要找到树的根节点。接着想到,对于美丽指数为负数的节点,必不可能为根节点,原因见下图:图中白色数值表示节点美丽指数,黑色数值表示节点编号。左图描述了节点1不需要保留的情况,右边图描述了节点1需要保留的情况。对于左图,节点1不需要保留,那必然不能作为根节点,因
2022-05-04 11:27:48
455
原创 P1118 [USACO06FEB]Backward Digit Sums G/S
一、题目二、解题思路看到n的规模比较小,首先想到了使用暴力求解,最大规模为12!。但是考虑到,当n=12时,如果我们每次按照游戏的方式去模拟计算sum,效率将会很低。分析游戏规则不难发现,sum的值由最上层的排序决定,并且每层均是上一层的和,所以,最终的sum必然可以写成第一层数字的和,即sum=∑ai∗kisum=\sum{ai*ki}sum=∑ai∗ki,而且kikiki与aiaiai无关。那么如果我们得到了kikiki,计算效率将会显著提高。除此之外,还可以发现,如果两个数列是关于中点对称时
2022-05-02 19:41:42
1472
原创 P1114 “非常男女”计划
一、题目二、解题思路题目看起来比较复杂,但提取关键字以后就会发现问题其实挺简单。关键字:连续、男女人数相等、0女生、1男生。分析题目可以发现,我们的问题实际上为找到和为长度一半的连续子序列,考虑到数据的规模比较小,我们可以直接采用暴力搜索:对于每个同学,查找包含他的所有连续子序列(长度需要为偶数,因为奇数必然不可能男女人数相等),并检查这些连续子序列是否满足要求。对于数列[ai, aj]的和,我们可以采用简便的计算方式。首先计算整个数列的前n项和,记sum[n]为前n项和,那么[ai, aj]
2022-05-02 09:29:30
368
原创 P1113杂务
一、题目二、解题思路这道题难度比较低,双重for循环直接搞定,主要因为题目给的限制条件比较多,降低了题的难度。如果去掉限定条件,杂务k的准备工作只能在杂务1至k-1之间,那题目难度将会适当增大。现在加入限定条件,相当于我们只需要从小到大确定杂务的执行结束时间,但如果取消该条件后,我们每次都需要去寻找,到底哪个杂务的执行结束时间能被确定(即需要找到前驱已经确定的那个杂务)。三、代码#include<iostream>#include<string>#include<
2022-04-29 20:54:58
511
原创 P1111修复公路
一、题目二、解题思路看到该题,我第一反应以为是求最短路径,因为题目中说是最早什么时候通车,我把该问题想成了确定图中任意两个节点的最短距离,然后最大的距离即是最早的通车时间。但随后经过分析,发现问题并没那么复杂,因为路是并行修的,也就是说最耗时的那条路一旦修成,就相当于所有可达村庄均已通车,所以该问题实际上为最小生成树问题,而非最短路径。对于最小生成树问题的求解,可以分为两步:(1)将所有边从小到大进行排序;(2)从小到大进行边的选择,判断新加入的边是否多余。对于排序问题,我们可以直接采用map存
2022-04-28 09:46:09
197
原创 P1106删数问题
一、题目二、解题思路首先想到使用暴力求解,显然所有情况共ANkA_N^kANk种,计算量比较大,很有可能超时。该题为从N个数中取k个数,对于这种问题,应当想到是否可用动规解决。分析发现,对于该问题来说,后面的结果不影响前面的结果,具体来说,假设已经从前i个数中取了j个数,随后我们在i+1~N中取数字的时候,不管怎么取,前i个数的结果都是确定的,不会因为后面取什么数而改变,因此,可以确定该题能使用动规解决。假设dp[i][j]表示前j个数中,取i个数后的最优解。由于该题的数字很大,显然无法使用i
2022-04-27 19:05:47
275
原创 P1103书本整理
一、题目二、解题思路1.首先需要将书根据高进行排序。发现书的高度唯一,因此我们可以采用map进行书的存储,存储完毕后,书将会自动有序。2.考虑到前面的书拿掉时不会对后面的结果产生影响,因此可以想到该题可用动态规划进行求解。3.应当注意的是,在动规时,应当保存每本书的状态(第i本书是否保留,因为如果不保留的话,无法计算第i本书以后的不整齐度),此时规定dp[k][i][0]表示对于前i本书,当不保留第i本书时,拿走k本书后的最优值;dp[k][i][1]表示对于前i本书,当保留第i本书时,拿走k本
2022-04-26 16:32:07
1619
原创 支持向量机理论
点到平面的距离问题这里的公式出现在书的第122页. 在样本空间中, 划分超平面可通过如下线性方程来描述:wTx+b=0w^Tx+b=0wTx+b=0其中w=(w1;w2;...;wd)w=(w_1;w_2;...;w_d)w=(w1;w2;...;wd)为法向量, 决定了超平面的方向; bbb为位移项, 决定了超平面与原点之间的距离. 显然, 划分超平面可以被法向量www和位移bbb确定. 试证明样本空间中任意点xxx到超平面的距离可写为:r=∣wTx+b∣∣∣w∣∣r=\frac{|w
2020-06-11 16:04:07
279
原创 RBF神经网络
简单介绍此次目标为使用RBF解决异或问题, 是书中第116页的习题5.7, 主要用到了两个公式:ρ(x,xi)=e−βi∣∣x−ci∣∣2φ(x)=∑i=1qwiρ(x,ci)\rho(x, x_i)=e^{-\beta_i||x-c_i||^2}\\\varphi(x)=\sum_{i=1}^qw_i\rho(x,c_i)ρ(x,xi)=e−βi∣∣x−ci∣∣2φ(x)=i=1∑qwiρ(x,ci)其中qqq为隐层神经元个数,cic_ici和wiw_iwi分别是第iii个隐层
2020-06-08 16:18:04
727
原创 多变量决策树
简单介绍本文使用PyTorch进行多变量决策树的实现. 多变量决策树的结构为二叉树,实际上是多个线性模型的组合,原理可见下图:图4.13表示的是多变量决策树的结构,图4.14表示的是对应的分类边界代码实现定义数据集首先将书中的数据集转换为方便计算机操作的形式,数据集如下图所示:首先将各离散属性值进行编号:颜色{青绿=0, 乌黑=1, 浅白=2}, 根蒂{蜷缩=0, 稍蜷=1, 硬挺=2}, 敲声{浊响=0, 沉闷=1, 清脆=2}, 纹理{清晰=0, 稍糊=1, 模糊=2}, 脐部{凹陷=
2020-06-02 19:23:15
9217
15
原创 决策树和带预剪枝的决策树
简单介绍本文使用PyTorch进行决策树的实现,在实现决策树时,选用信息增益来选择划分属性. 数据集的纯度使用信息熵来度量:Ent(D)=−∑k=1∣Y∣pklog2pkEnt(D)=-\sum_{k=1}^{|Y|}p_klog_2p_kEnt(D)=−k=1∑∣Y∣pklog2pkEnt(D)Ent(D)Ent(D)表示信息熵, 值越小, 则样本集合DDD的纯度越高, ∣Y∣|Y|∣Y∣表示样本中共有∣Y∣|Y|∣Y∣类, pkp_kpk表示集合中第kkk类样本所占的比例为pkp_k
2020-05-28 18:51:06
444
原创 线性模型
公式法求解线性模型该公式出现在书中的54页, 问题如下: 已知E(w,b)=∑i=1m(yi−wxi−b)2E(w,b)=\sum_{i=1}^m(y_i-wx_i-b)^2E(w,b)=∑i=1m(yi−wxi−b)2, 求www和bbb的最优解.证明: 首先将E(w,b)E(w,b)E(w,b)分别对www和bbb求偏导,可得:∂E(w,b)∂w=2(w∑i=1mxi2−∑i=1m(yi−b)xi)∂E(w,b)∂b=2(mb−∑i=1m(yi−wxi))\frac{\partial E(
2020-05-27 19:18:43
214
原创 绪论和模型评估与选择
No Free Lunch Theorem证明这里的公式出现在书的第8页,为简化版的NFL,令P(h∣x,εa)P(h|x,\varepsilon_a)P(h∣x,εa)代表算法εa\varepsilon_aεa基于训练数据集XXX产生假设hhh的概率,令fff表示真实的目标函数,AAA表示样本空间,则εa\varepsilon_aεa的训练集外误差为:Eote(εa∣x,f)=∑h∑x∈A−XP(x)ℓ(h(x)≠f(x))P(h∣x,εa) E_{ote}(\varepsilon_a|x,f
2020-05-26 20:45:20
169
原创 SVM with kernel function
简单介绍在不使用kernel function的情况下,SVM只可以用来解决线性可分问题,面对线性不可分问题时,使用效果不佳.但是加入kernel function后,SVM的表达能力将会显著增加,下面将会简单介绍其原因,并使用PyTorch加以实现.源代码以及题目等文件见博客原理SVM的原理不再进行赘述,具体可见博客.我们需要理解两个方面,1.为什么要使用kernel function....
2019-12-06 09:46:17
1044
10
原创 SVM without kernel function
简单介绍SVM(support vector machine)在没有使用核函数时,类似于Logistic Regression,但与Logistic Regression存在差别,最直观的差别便是Logistic Regression输出的为概率,而SVM直接返回判定结果.下面将详细介绍SVM的具体理论.源代码以及题目等文件见博客原理支持向量机原始的支持向量机只可解决线性可分问题.考虑下...
2019-12-05 16:29:49
559
4
原创 K-means clustering and image compression
简单介绍K-means clustering属于无监督学习(unsupervised learning)的范畴,由于设计思想易于理解,并且计算相对简单,因此实现起来较为简单,本文将采用PyTorch进行实现.源代码以及题目等文件见博客原理K-means clustering主要分为两步:找到各类的中心点(记为centroids1,centroids2,...,centroidskcentr...
2019-11-30 17:06:09
468
2
原创 Bias V.S. Variance
简单介绍本文内容为通过一定手段,判断模型是否处于欠拟合或者过拟合.主要以线性回归为依托,完成该次实验.值得注意的是,当代码量增多时,尽量将代码模块化,分模块完成,并且每完成一个模块,都需要认真的进行模块检验.如果在模块组装完成后再进行调试,将会提高调试的难度.源代码以及题目等文件见博客线性回归导入必要的包并读取数据import torchimport torch.nn as nni...
2019-11-29 19:34:09
312
原创 Neural Networks Learning
简单介绍本博客承接Multi-class classification的最后部分.在Multi-class classification中的最后部分,作者构造了跟本文同样结构的Neural network,但并未进行网络训练,而是直接使用已经训练好的权重矩阵对网络进行初始化,本文将对Neural network进行训练,用来完成手写识别任务,并测试训练效果.值得注意的是,在Multi-cla...
2019-11-28 13:57:08
488
原创 Multi-class Classification
简单介绍本文主要分为两个内容.一.使用Logistic回归完成多分类任务,值得注意的是,完成的过程中并未使用SoftMax,所以各类的可能性相加并不为1,可以把它看作使用Logistic完成多个二分类任务.二.使用多层神经网络完成多分类任务,本文并未自行训练,而是直接使用已经训练好的权重矩阵对网络进行初始化,即fine-tune.此次多分类任务为手写识别,使用两种方法均可以达到不错的效果,...
2019-11-27 21:44:56
636
原创 目录:吴恩达机器学习课后作业
简单介绍本博客为作者自行完成的吴恩达机器学习课后练习题目录,均使用PyTorch进行实现,无法保证对错,仅供参考.作业题目以及源代码百度盘连接提取码:njjk题目的命名方式与下表中的作业名称一致.源代码统一放在Code文件夹下,命名方式与主要内容一致(英文).目录作业名称主要内容地址machine-learning-ex1线性回归传送门machine-...
2019-11-27 21:20:29
7426
3
原创 Regularized Logistic Regression
简单介绍当模型过于复杂时,会出现过拟合的现象,此时需要使用正则化.正则化即是通过减小权重值的大小,来达到降低模型复杂程度的目的,进而应对过拟合问题.以多项式拟合为例:y=anxn+an−1xn−1+...+a1x+a0y = a_nx^n+a_{n-1}x^{n-1}+...+a_1x+a_0y=anxn+an−1xn−1+...+a1x+a0如果ana_nan足够小,我们就可...
2019-11-26 19:00:32
842
2
原创 Logistic regression
简单介绍Logistic regression相比Linear regression多了激活函数,目的在于为目标方程添加非线性部分.实现起来,难度与Linear regression相差不大,理论同样相对简单.本文将采用PyTorch进行实现.导入包并读取数据# load package and load dataimport torchimport torch.nn as nnimp...
2019-11-26 15:52:54
884
原创 Linear regression
简单介绍线性回归实际上即是数学中的线性拟合,原理十分简单,不再介绍.本文采用PyTorch进行实现,除了线性模块和归一化为自己实现,其余部分均为PyTorch已经封装好的,值得注意的是,实际上PyTorch已经对线性回归进行了封装,调用方式为nn.Linear(input_channel, output_channel).本文通过两种方法完成线性回归.第一种为通过最优化的方法,通过训练数据,...
2019-11-25 10:28:53
3265
3
原创 Pytorch.squeeze和unsqueeze
简介和用法squeeze和unsqueeze的作用与其翻译基本一致,被作用维度压缩和解压缩.用法相对简单,具体如下:tensor_unsqueeze = tensor.unsqueeze(dim)若tensor存在n个维度,则dim的取值为[-n+1,n]区间的整数,且dim的取值不能为空.tensor_squeeze = tensor.squeeze(dim)若tensor存在n个维度...
2019-11-13 09:35:41
358
转载 anaconda装环境遇到无法定位程序输入点OPENSSL_sk_new_reserve……问题
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...
2019-11-07 14:11:27
439
原创 lambda用法
lambda使用方式lambda的定义格式如下:lambda variable: expressionvariable表示变量,可以没有或者有多个;expression表示包含variable的计算表达式.lambda具体用法无参数有参数嵌套使用与filter连用上图中,filter的第一个参数为函数,第二个参数为列表,需要注意的是,第一个参数应返回bool值.filter...
2019-11-05 18:32:23
132
原创 PyTorch.gather()理解
函数调用使用torch.gather()的方式有两种,第一种为直接使用torch.gather().第二种为SourceTensor.gather().容易出现疑惑的地方为dim的取值.dim的取值范围为{-2,0,1}.下面分情况进行讨论(在二维平面上讨论).dim=0通过上图中的代码执行结果可以看出,当dim为0时,y中的数据值表示行索引,而y中的数据索引表示列索引.具体到上图中的情况即...
2019-11-02 17:46:23
558
原创 PyTorch手动梯度清零
Pytorch中,每个batch训练完后需要使用Variable.grad.zero_()进行梯度清零(其中Variable为变量名,性质为torch.tensor).在Pytorch中,之所以需要手动进行梯度清零,而不是选择自动清零,是因为这种方式可以让使用者自由选择梯度清零的时机,具有更高的灵活性.例如选择训练每N个batch后再进行梯度更新和清零,这相当于将原来的batch_size扩大为N...
2019-11-02 11:11:33
13720
1
原创 记2019保研经历
目录本人情况夏令营情况湖南大学信科院夏令营暨南大学计算机院夏令营预推免山东大学(威海)预推免总结专硕和学硕优秀营员本人情况就读院校:广西某双非工科院校就读专业:信息与计算科学;GPA:88.64年级排名:1/113英语水平:四级465 六级512科技竞赛:美赛二等奖,蓝桥杯国三,数学建模省一,数学竞赛省一,互联网+省铜论文:无获得offer:湖南大学,山东大学(威海),暨南大学...
2019-11-02 10:13:46
1692
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人