- 博客(70)
- 问答 (17)
- 收藏
- 关注
原创 子集状压DP
本来应该放到DP篇。但由于这个部分灵神单列了题单,我就按题单刷题记录单列一篇。位运算状压应该算是我入门第一个接触到的算法级别的trick。知识图谱也列出来了:因此本篇会略过位运算,仅将其作为工具。主要还是子集DP。
2023-12-30 22:00:49
1984
原创 Sliding Windows
本质为同向双指针。大致来说就是当要统计符合某一性质的区间数量时,可以考虑左右指针选取一个窗口,不停地扩展窗口,边扩展边统计,直至窗口大小达到区间长度上限或窗口不再满足该性质为止。
2023-12-29 12:36:44
443
原创 Greedy
贪心本质上是不可能反悔的,这和贪心算法的定义是矛盾的:贪心每次都选取当前的最优解,所以一旦反悔了,被反悔的那次选择就不叫贪心了。但有时候因为题目的特殊性质,在明确了一个贪心算法之后,我们使用数据结构记录下每次的贪心选择,在之后做出贪心选择时查询记录,如果不满足“全局贪心”的结论,就置换贪心选择,称为反悔贪心。
2023-12-25 20:10:28
381
原创 BS:最小化最大值
按照LC的尿性,最小/大化最大/小值,九成九的二分板子。暴搜一定是TLE的。这种题都有单调性质:参数值越xxx,结果越xxx。
2023-12-24 16:42:33
412
原创 Shortest Path
无/有向图,可带负边权。java比较笨,没inf这种标识符。我就用包装类作为边权了,含null。因此特判有点多。dp(k)(i,j)表示从i到j的最短路,这条路径上除了i,j这两个节点,序号最大为k。
2023-12-24 13:21:04
382
原创 Computer_Graphics SDU2023 Lab1 Spinning_Pinwheel
山东大学软件学院2023秋计算机图形学实验一
2023-10-20 10:32:08
317
1
原创 上台阶问题的两种实现
一个实际的问题:“一共有20级台阶,一次只能上一级或两级,问一共有几种上法?” 这里我考虑了两种方式。第一种,解不定方程,随后组合并求和;第二种,递归。
2022-07-11 22:57:06
538
原创 DFS初见 整数分解与全排列
两道题目 整数分解与全排列 初步了解了一下深度优先搜索第一题:整数分解思路:当一个输入的整数被分解过后,它会产生一个剩余的数。比如7分解3会剩余4,4就成为了新的待分解的数。因此4就是7,于是分解过程是完全一致的。由是,选择递归递归基:当剩余的数为0时,意味着分解完毕。例如7分解3剩下4,4分解4剩下0,这个时候就分解完了,可以按照需求格式打印DFS代码部分:我们按照字典序,对于每一次的递归,都从小到大的挑选那个最小的分解数,随后把这个分解数存入一个数组中,之后在递归中挑选分解数..
2022-03-29 16:01:36
912
原创 PAT乙级 1100 区块反转 java(22/25) 测试点5超时
思路:由于不需要真的自己写一个链表,所以可以用uitl下的LinkedList来实现,只需要更新LinkedList中元素的address和next使打印的结果符合一个真链表的形式即可。创建Node类,属性包含int类型的地址、数据、下一个节点的地址。重写toString()方法以便打印Node对象。初始化Node类型的数组,读取所有元素的属性信息,创建对应的Node对象并以对象的地址属性为索引存储在数组中。创建初始链表与目标链表对象。根据区块长度计算区块个数,随后分类讨论,(1)可以整除...
2022-02-15 17:11:32
304
原创 PAT乙级 1075 链表元素分类 java(20/25) 测试点5超时
思路:由于不需要真的自己写一个链表,所以可以用uitl下的LinkedList来实现,只需要更新LinkedList中元素的address和next使打印的结果符合一个真链表的形式即可。创建Node类,属性包含int类型的地址、数据、下一个节点的地址。重写toString()方法以便打印Node对象。初始化Node类型的数组,读取所有元素的属性信息,创建对应的Node对象并以对象的地址属性为索引存储在数组中。创建三个LinkedList对象,对应题目中的三个类别,分别为:小于0、0到K、...
2022-02-14 21:01:36
237
原创 PAT乙级 1075 链表元素分类 java(20/25) 测试点5超时
思路:由于不需要真的自己写一个链表出来,所以可以用util下的LinkedList来实现题目要求的顺序,只要更新一遍链表中元素的地址和下一个元素的地址就可以了。创建Node类,属性包括地址,存储的数据,以及下一个节点的地址。重写toString()方法方便打印。读取所有的链表元素的属性信息,创建对象并存储在数组中。创建三个链表对象,分别对应题目中小于0、0到K、大于K三种类别的元素。随后通过数组下标遍历存储的节点,分类存入三个链表中。再把三个链表中的元素按照题目要求的顺序存储到最终的目标链表中。...
2022-02-14 20:46:49
256
原创 PAT乙级1020 月饼 java实现
思路:为了使用Collections的sort()方法进行单价的排序。在main()函数中创建Map对象,将输入数据的数组索引作为key,将库存、单价、销售总额三者组成的double类型数组作为value。自定义月饼类,以Map.Entry<>类型数据为属性,将键值对存储在MoonCake对象中,重写compareTo()方法以获得按照单价降序排列的动态数组。在main()方法中用动态数组存储所有的月饼对象。降序排序后利用迭代器迭代各月饼对象,并判断需求量是否达标,达标退...
2022-02-12 22:42:35
349
原创 PAT乙级1015 德才论 java(19/25) 测试点3、4超时 测试点2压线
思路:把德分和才分存入数组中,作为Map中的value,ID作为key。自定义考生类person,将person的属性设为Map.Entry<key,value>,随后重写compareTo()方法,伴随一个动态数组存储person类型的对象,最后Collections.sort()进行排序。也是意料之中的超时了,各位如果有AC的java代码也可以分享下!代码如下:import java.io.*;import java.util.*;/*考生类 包含键值...
2022-02-12 17:32:42
522
原创 PAT乙级1088 三人行 java 含测试点3,4
思路:现在草稿纸上分类解方程组 具体为1.9|a-b|=x*c 2.10b+a=y*c 其中a,b分别为甲能力值的十位与个位 c为丙能力值 得到9|a-b|=(10b+a)*x/y 之后分类去掉绝对值得到a与b的关系式 而a是正整数 b是整数(注意不一定是正整数,可以是0)令a遍历9到1 b遍历9到0(逆序的第一个解即最大) 若a b满足得到的关系式,那么(a,b)就是一组最大解 之后按照题目要求输出即可测试点3:输入90 9 1 输出 90 Ping Gai Gai我一开始错了这个,...
2022-02-08 18:47:43
256
原创 PAT乙级1050 螺旋矩阵 java实现
思路:观察发现,在填充过程中,总能找到一个时刻,使得二维矩阵的“最外层”均填充完毕,同时“内层”均未被填充过。于是可以以“圈”为单位考虑整个填充过程,即每次循环填充一圈。而每一圈由四个填充过程组成,分别是最上层,最右层,最下层,最左层。当每一层填充完毕后,便向内层收缩一圈,例如最上层是向下移动一行。需要注意的是每层填充都会把下一次填充时要填的第一个数填掉,所以除了整个填充过程中的第一次填充,其余每层都要跳过上一层的最后一个数,从本层的第二个数开始填充代码如下:import java.io.*...
2022-02-05 22:30:58
283
1
原创 PAT乙级1103 java 最后一个测试点
import java.util.*;public class Main { //判断是否是完全平方数的方法 public static boolean isSquare(int n){ int root=(int)Math.sqrt(n); if(root*root==n){ return true; } return false; } //求算数平方根 public...
2022-01-30 10:53:07
708
原创 一道发源于游戏中的数列题(求项数最大值)
之前上高中的时候打游戏时想到的一道题目扑克飞镖:每使用一次法力值消耗增加1点 初始法力值为零费 每次使用后回手吹气:获得五点法力值 手牌中法力值最高的牌消耗归零假设魔术师现在手中仅有上述两张手牌 且两张牌的配合机制如下: 当打出吹气后 扑克飞镖的法力值重新计算(即首项为零 公差为一的等差数列)请问:(1).当魔术师初始法力值为25 求本回合中她最多可以打出几次“扑克飞镖”?(2).当魔术师初始法力值为常数m时(m>0)求本回合中她最多可以打出几次“扑克飞镖”? (注:(1)与(2)中
2022-01-22 22:47:58
2453
原创 PAT乙级1087 有多少不同的值
作为一个小白,还没有学过set集合。查阅了一下其他的文章,多用set中的size方法来计算个数。私认为可能有另外一种简便的写法,希望得到大家的指教。思路:题目中要求的是从1到N对应的数列各项的不同数值的个数。而注意到数列{⌊n/2⌋+⌊n/3⌋+⌊n/5⌋}是一个非严格单调增的数列,也就是说只要数列各项的值相比于上一项发生过改变,那么它在整个数列中一定是第一次出现的。而导致各项的值发生改变的原因在于式子“被除数÷除数=商......余数”中的商发生了改变,因为这个商就是高斯函数最终的值。那么什么情况..
2022-01-21 20:23:03
659
空空如也
PTA 字符串读取不到最后一行
2022-05-13
PTA 括号匹配 递归写法 测试用例均不通过
2022-05-13
C++ 分数加法重载 浮点错误
2022-05-05
PTA天梯赛练习集 L1-006 连续因子
2022-03-31
PTA天梯赛练习集 L1-006 连续因子
2022-03-30
PAT乙级1085 PAT单位排行 测试点1、2答案错误 java
2022-02-12
PAT乙级 1065 单身狗 java 测试点34超时
2022-02-11
一道PAT1069 微博转发抽奖 答案错误
2022-02-06
一道PAT1100 校庆 运行超时
2022-02-05
一道PAT1066 图像过滤 内存超限
2022-02-01
一道PAT1059 C语言竞赛 运行超时
2022-02-01
一道PAT1071 小赌怡情 测试点错误
2022-01-30
一道PAT1062 最简分数 测试用例运行超时
2022-01-24
一道PAT1060 爱丁顿数 运行超时
2022-01-22
一道pat 1010 一元多项式求导 有一个测试点答案错误但是想不出为什么
2022-01-20
一道PAT 1049数列的片段和 运行超时
2022-01-16
一道PAT 1030完美数列 java实现 测试用例不通过
2022-01-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅