- 博客(26)
- 收藏
- 关注
原创 5.9代码
从数学来看,n=素数*k,k=2,3,4...,而我们要进行两次,由于有多个解时我们要选最小的,所以要找到最大的素数,但是这个最大素数要小于等于n/2的整数,然后中间那一次的n的选择要选比最大素数大的最少的合数,所有可以先用埃及筛算一下素数,找到最小合数之后要从比他小的素数中找到谁的二倍是比它大的最小的合数,再找到比这个素数大的最小的合数,有一点点绕,然后做起来并不难。素数筛出了一点点小问题,虽然现在是对的,但是感觉和老师给的好像从逻辑上来说没找到啥区别..
2024-05-10 18:48:46
183
原创 5.7代码
分析:最开始进入了一个误区,觉得都有通路了直接算通路就可以,后来才发现居然是最小路径的总和,所以大概是每减一次都要算一次各点之间的最小路径了,然后是循环,到需要的条件为止。总的来说思路不算难,但是写起来非常的 麻烦,调试的时候写了很多的输出。
2024-05-07 18:30:51
210
原创 5.5代码
从题目来看是分五种情况,由于cin>>string是按行输入的,所以可以自然的就接收一整行了,然后就去里面找=。数字大部分都是在等号后面出现的,如果是数组的话要找[和],如果是字符串的话就是要找" "之间的长度了,分完类之后就可以开始入手了。这个是一个非常清晰的代码,好几个帖子都管这个题叫大模拟题,搜了一下大概就是情况很复杂,要慢慢分析,把情况找全了去模拟那种手算的方式,这种就是纯想办法了。啊啊啊不得不说这是一个耗费时间的纸老虎啊,思路不难,写起来太浪费时间了,调试了很久。
2024-05-05 21:42:22
403
原创 5.4代码
在这个代码里遇到了几个常见的错误,首先就是memset函数,它只能初始化成0和-1,最开始想设置成1结果搞错了,第二就是i和j的顺序,要注意一下,这个题的解法很巧妙的地方在于如果是重复出现的,要剪掉重复的,其实就是剪掉它之前的递增子序列数,也就是f(j)流程大概就是遍历,找到比目前的数来的小,但是他的最长子序列又比目前的最长子序列来的要大,我们就更新,更新到要看的数据的前一个(比自己来的小但是有最长子序列的),更新完本身后再比较看看这个是不是最长的,如果是的话要更新总体最长的。
2024-05-04 22:49:54
509
原创 5.3 代码
1.假设a放在了b的位置,那么b就有两种放置方法,第一种是b放在a的位置,那么就等于是除了a和b,剩下的n-2位排错,我们记为d(n-2),第二种情况就是b没有放在a的位置,那么就是b放在了其他的位置,也就是说是剩下的n-1位全排错了,我们记为d(n-1)位,这样的话总的来说就是第n位的全排错是d(n)=(n-1)*(d(n-1)+d(n-2)),所以第28位就可以用代码写出来,但是要注意。=0),感觉很奇怪,感觉代码没问题但是跑不出来结果,循环一直停不下来,先放着吧,过几天再来看看。
2024-05-03 23:12:54
391
原创 最短路径(2.19)
分析:我想到的时用迪杰斯特拉算法,在计算的过程中记录中转次数进行剪枝,比较容易出错的点就是可以中专k次,但是直接到达的算是中转0次,但是如果是原点和终点在同一个地方的话要比0次少一次,那就是-1次,但是我设置的是从原点到原点是0次,所以可以理解成到达某个地方需要乘坐几次航班,那就是乘坐k+1次时才算中转k次,这里比较容易出错。先从邻接矩阵开始写,要设置好visit[](做标记)和dist[](记录最短距离),从0开始循环n遍,保证每个点都可以做一次中间点,找到最短的且未被标记的,然后以她作为中间点更新。
2024-03-03 21:32:12
1221
14
原创 贪心(林大)
例如,如果您有五根棍子,它们的长度和重量分别为(9,4)、(2,5)、(1,2)、(5,3)和(4,1),则最短设置时间应为2分钟,因为有一系列成对的棍子(4,4),(5,3),(9,4),(1,2),(2,5)。测试用例的数量)(T在输入的第一行中给出。作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排吗?
2024-02-28 11:41:39
878
原创 2.4贪心(中等)
1.编写一个高效的算法来搜索m x n矩阵matrix中的一个目标值target。truefalse分析:本来想写分治的,结果分治的题用的是贪心,但是我想了好大一会儿还是只想到了全部遍历 ,所以还是打算在写一天贪心这个题的解决办法就是来源于它二维矩阵的特例,是各行各列都是有顺序的,所以可以想到从左下角开始找,如果目标数更大的话就往左走,小的话就往上走,有点类似于那种二叉树。
2024-02-04 21:28:17
507
1
原创 2.2贪心(中等)
分析:这个题我想到的就是有点空间换时间了,设一个数组等于消耗-油量,如果总和小于0一定不成功,但是没想到怎么写循环,然后在题解中看到可以用一个index%n在while中写循环,但是也没感觉到用贪心了。分析:在写的时候还是出错了,我已经是c++11了还是会出错,有说要替换文件的替换了也没用,后面又重新下载了一次也没用,找了很久也没找到原因,今天太晚了,之后有时间了可以再研究一下它。你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。
2024-02-02 22:47:25
898
原创 1.30贪心(简单)
分析:本来想的复杂了,但是看题目是依次遇上对手,所以就可以直接开始写,如果精力或者经验不够的话,可以再加,这样就可以直接写了,这个题要输入的数据很多,而且就是写的是严格超过,我刚开始没有看到就写错了挺久。分析:这个思路还是比较简单的,就是排序一下,然后从大的往小的进行比较,因为输入的是两个数组,我就按g和s的数的总和来算了。虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。- 你的精力与经验都超过第 1 个对手,所以获胜。
2024-01-30 20:56:13
1163
1
原创 1.28回溯(中等)
分析:之前有一道题用了排序,就让我想到了可以先排序,然后算一下总和,通过总和是不是4的倍数和总和/4是不是大于最大值来剪枝,之后就是要用到回溯,在回溯中,如果加和大于总和/4的话就要剪枝,这样可以减少计算量,然后剩下的就是回溯了,我本来想的是用一个字符串s1来记录然后放到4个result中,但是它直接就是result[4],然后从这四个类似于堆的vector下手去做,就简单了好多,感觉真的非常的聪明欸。[0,2,3,1] 也是一个有效的格雷码序列,其二进制表示是 [00,10,11,01]。
2024-01-29 21:58:28
876
原创 1.27回溯(中等)
分析:这个剪枝不是很好理解,if(nums[i]==nums[i-1] && used[i-1] == false) continue;这里是对同一层进行剪枝,同一层表示的是同一个位置,如果这个位置上的数重复了,那我们就直接continue。分析:是回溯的全排列类型,刚开始写的时候传参传的不是used的地址,所以used里面持续是0。分析: 这个在我看来属于回溯的组合型,我打算用组合型来做。返回该数组所有可能的子集(幂集)。1.给定一个不含重复数字的数组。返回所有不重复的全排列。
2024-01-27 20:36:07
545
4
原创 1.26回溯(中等)
分析:这个题就是比较典型的回溯的组合型问题了,本来是想用结构体来表示,后来发现map写起来更容易,map直接用等号和string.pop_back需要c++11,不然会编译不过去。分析:又回到这道题了,这个只有左括号和右括号两种选项,可以看作是回溯的选和不选的类型。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且。的字符串,返回所有它能表示的字母组合。
2024-01-26 21:58:07
434
1
原创 1.25回溯(简单)
表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。- [5,1,6] 的异或总和为 5 XOR 1 XOR 6 = 2。setiosflags(ios::scientific) 指数表示。setiosflags(ios::fixed) 固定的浮点显示。- [1,3] 的异或总和为 1 XOR 3 = 2。- [5,1] 的异或总和为 5 XOR 1 = 4。- [5,6] 的异或总和为 5 XOR 6 = 3。- [1,6] 的异或总和为 1 XOR 6 = 7。
2024-01-25 20:04:47
1040
3
原创 1.23动态规划(中等)
写代码运行226的时候报错,发现到第二个2的时候没办法找到dp[i-2],于是我又发现了一个很神奇的东西就是dp[-1],还真是第一次遇见。本来想用递归写,后来发现没办法处理同时有很多回文串的,比如abaaba,但是又想不到办法,看了题解发现要用回溯,打算明天看一下回溯。后来发现这样想不对 ,然后我研究了一下,发现是在解题的时候少了一部dp的转换,果然还是要按照步骤来的。"06" 无法映射到 "F" ,因为存在前导零("6" 和 "06" 并不等价)。它可以解码为 "AB"(1 2)或者 "L"(12)。
2024-01-23 22:49:35
987
1
原创 1.22动态规划(中等)
分析:好像有点贪心和剪枝的意思,比穷举简单了一点点吧,但是也不是动态规划,刚开始没有衔接好i变换的那里,费了很大力气,后面发现还有一个问法不同的类似问题,我一起jie'da。分析:由于只能向右和向下移动,所以移动到dp[i][j]路径需要把它左边和上边的路径加起来,而且一定是没有重复的,初始化一下左边和上边一列即可。分析:有点类似于前天写过的那个,求股票利润的题,dp[i]表示前i个数字的最大和。inention -> enention (将 'i' 替换为 'e')1. 向右 -> 向下 -> 向下。
2024-01-22 21:55:26
986
1
原创 1.21动态规划(中等)
分析:我想到了一种方法就是回文串是前后对称的,所以可以以每一个字符为中心然后前后对比,但是这个只适用于回文串是奇数的情况,后来在网上查到了这个叫中心扩展法,当是偶数的时候我们可以把中间的两个当作是中心对称点,这样就可以了。分析:首先想到的是直接reverse得到字符串的翻转,再去找他们的最长子串,后来发现直接翻转去一一核对会出现问题。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。"aba" 同样是符合题意的答案。分析:这是在网上看到的方法。
2024-01-21 21:51:34
616
1
原创 1.20 动态规划(简单)
在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。分析:从分析来看,类似于斐波那契数列,f(0)=0,f(1)=1,f(2)=2,要用递归。返回你可以从这笔交易中获取的最大利润。设计一个算法来计算你所能获取的最大利润。在「杨辉三角」中,每个数是它左上方和右上方的数的和。1. 1 阶 + 1 阶 + 1 阶。1. 1 阶 + 1 阶。
2024-01-20 21:27:42
1059
原创 1.16 递归(中等)
分析:在搜到的题解中,管这个问题叫零和博弈,即为无论怎么变化,两者的得分总和不变,所以想让自己的得分最高,就要想办法让对方的得分最小。无论怎样的情况,都会有一个这种情况下的最高得分,所以可以让每一轮的先手控制下一轮的得分最小即可,那当前的得分就是总和减去当前要看的l到r总和最小。最终,玩家 1(234 分)比玩家 2(12 分)获得更多的分数,所以返回 true,表示玩家 1 可以成为赢家。长度为 1 的好数字包括 "0","2","4","6","8"。每一回合,玩家从数组的任意一端取一个数字(即,
2024-01-16 17:14:32
1118
1
原创 1.15 递归
分析:模仿约瑟夫环,我们只需要知道最后留下来的是几就好,从左往右删时,头部肯定需要换掉的,从右往左删时,如果剩余的总数是偶数,那么头部就不需要换,如果是奇数,那就需要换掉,换成它本身加上步长,所以要定义的变量就有总数num,步长step和头部head。分析:字符串解码很明显是要用栈来写的,很想不通为什么这个题要用递归写,也不知道该怎么用递归来写,在网上看了下他们的递归,是在s[i]为‘['时递归,直到s[i]为']'时返回res。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。
2024-01-15 22:12:17
1246
2
原创 1.9 递归(简单)
分析:用递归可以做的题目大部分都可以用循环写的,循环写起来就是比较无脑了,这个题打算用递归写,递归的参数应该有现有人数num,编号target和下一个开始成员begin,先想到的就是循环链表了,先用尾插法,尾插法到结束的时候把next指针改成head即可;分析:这个属于比较经典的了,思路比较简单,我还是想试试递归,感觉还是看递归代码太少了,在网上看完之后才发现可以直接return fb(n-1)+fb(n-2),为了这个还忙活了半天,原来可以直接写的,哭死....请返回游戏结束时最后一位成员的编号。
2024-01-14 21:49:45
953
1
原创 林大OJ (24.4)
分析:x为最大公约数,所以能得到的数一定的x的倍数,所以只用从x的倍数里求就好,但是要注意,x的倍数的最大公约数不一定时x。但是在做的时候我本来是打算让j从i开始,这样会减少循环次数,但是输出一直为2,到后来看了输出是(2,12) (4,6) (6,4) (12,2)才发现可以反过来,本来想到的是直接count*2,但是又想到了【x,x²】的特例,由于y只可能会是一个x的平方,所以判断一下如果count是奇数,就*2-1输出,如果是偶数就直接*2。聪明的你能帮帮他吗?
2024-01-07 21:12:08
857
4
原创 林大 OJ(24.3)
例如,k=8,s={1,2,3,5,8,13,21,34},那么有28场可能的游戏:[1,2,3,5,8,13],[1,2,3,5,8,21],[1,2,3,5,8,34],[1,2,3,5,13,21],……一天,他提着酒壶,从家里出来,酒壶中有酒两斗。比如前20个丑数是(从小到大来说) 1,2,3,4,5,6,7,8,9,10,12,14,15,16,18,20,21,24和25.对每组长方形,第一个数字是长方形的数量,然后是长方形的最小和最大x,y坐标(最小x,最大x,最小y,最大y)。
2024-01-06 20:47:04
829
1
原创 林大 OJ(24.2)
分析:题目很简单,在输出的时候出了一点点问题,用cout输出的时候控制输出位数用的是setprecision(),但是一直输出的是整数,最后在网上查了一下才发现是setprecision控制的是全部的数值,0省略了,所以小数点后的0要加上fixed。第二行至第N+1行分别为C语言a[i],线性代数b[i],高等数学c[i]和英语的成绩d[i](0 <= a[i],b[i],c[i],d[i] <= 100)。sort的形式是sort(start,end+1,greater<>()),less的可以不写……
2024-01-05 14:46:09
1141
5
原创 林大 OJ (23.1)
QWQ的朋友QAQ开了一个A工厂,但QAQ不是一个很精明的老板,A工厂只生产三种产品,需要三种原材料,第一种产品分别消耗第一种原材料a1、第二种原材料b1、第三种原材料c1,第二种产品分别是a2、b2、c2,第三种产品分别是a3、b3、c3,原材料总量是有限制的,分别是a、b、c,第一种产品可以盈利d1元,第二种产品可以盈利d2元,第三种原材料可以盈利d3元,由于每个产品都不可以分解,所以所有产品的生产量一定是整数。不这么做,这样就和dp[n][m-1]相同了。因为球和盒子都相同,还允许空的。
2024-01-04 16:28:47
960
8
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人