- 博客(57)
- 收藏
- 关注
原创 【万题详解】洛谷P2697 宝石串
题目描述有一种宝石串,由绿宝石和红宝石串成,仅当绿宝石和红宝石数目相同的时候,宝石串才最为稳定,不易断裂。安安想知道从给定的宝石串中,可以截取一段最长的稳定的宝石串,有多少颗宝石组成。请你帮助他。绿宝石用 G表示,红宝石用 R 表示。输入格式一行,一个由 G 和 R 组成的字符串。输出格式一行一个整数,表示最长的稳定的宝石串有多少颗宝石组成。输入输出样例复制GRG4说明/提示RGGR为答案。宝石数小于等于 106。
2024-03-31 15:46:38 1494 14
原创 【万题详解】洛谷P1616 疯狂的采药
题目背景此题为纪念 LiYuxiang 而生。题目描述LiYuxiang 是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同种类的草药,采每一种都需要一些时间,每一种也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。如果你是 LiYuxiang,你能完成这个任务吗?
2024-03-10 15:36:17 1338 13
原创 【万题详解】DFS搜索专题合集(中)
因此要开始刷习题集,每科都有一个习题集,分别有 1,s2,s3,s4 道题目,完成每道题目需要一些时间,可能不等A1,A2,…填数字方格的游戏有很多种变化,如下图所示的 4×4 方格中,我们要选择从数字 1 到 16 来填满这十六个格子(Ai,j ,其中 i=1⋯4 ,j=1⋯4)。排序的方式,是先从第一行的数字开始比较,每一行数字,由最左边的数字开始比,数字较小的解答必须先输出到文件中。每个角落上的 2×2 方格中的数字,例如左上角 A1,1+A1,2+A2,1+A2,2=34。
2024-03-10 11:28:58 1164 8
原创 【万题详解】P1048 [NOIP2005 普及组] 采药
如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。第四步:确定边界条件:先根据题目的限制条件来确定题目中给出的边界条件是否能直接推导出, 如果不行也可以尝试从边界条件反推(举个例子:a(n)→a(2)有递推关系, 但是a(2)→a(1)不符合上述递推关系, 我们就可以考虑用a(1)来倒推出a(2), 然后将递推的终点设置为a(2));第一行有 2 个整数 T(1≤T≤1000)和 M(1≤M≤100),用一个空格隔开,T 代表总共能够用来采药的时间,M 代表山洞里的草药的数目。
2024-03-08 21:11:01 1348 14
原创 【万题详解】DFS搜索专题合集(上)
dfs函数如下:dfs(i,nums,sum) 思路是,在面对第i个数时,我们有两种选择,一个是加第i个数,一个是不加第i个数,加的话,我们就把i+1(处理下一个数),sums+1,sum+num[i]放到dfs里递归,不加的话,就把i+1(还是要处理下个数),nums,sum(不用动,因为没有加第i个数)放到dfs里递归。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。注意:所有的中间结果须是整数,所以一些除法运算是不允许的(例如,(2 ×2)/4 是合法的,2×(2/4)是不合法的)。
2024-03-08 20:32:16 1031 13
原创 【万题详解】洛谷P1282 多米诺骨牌
即如果不旋转,第i组骨牌的结果是a[i]-b[i],所以从f[i-1][j-(a[i]-b[i])]转移过来,答案不加,如果旋转,第i组骨牌的结果是b[i]-a[i],所以从f[i-1][j-(b[i]-a[i])]转移过来,答案+1。初始值所有f[i][j]都是无穷大,f[1][a[1]]=0,f[1][b[1]]=1。(a[]和b[]分别表示第一行和第二行的数字)状态转移方程为f[i][j]=min(f[i-1][j-(a[i]-b[i])],f[i-1][j-(b[i]-a[i])]+1);
2024-02-10 10:55:51 1427 12
原创 【万题详解】洛谷P1238 走迷宫
有一个 m×n 格的迷宫(表示有 m 行、n 列),其中有可走的也有不可走的,如果用 1表示可以走,0表示不可以走,文件读入这 m×n 个数据和起始点、结束点(起始点和结束点都是用两个数据来描述的,分别表示这个点的行号和列号)。现在要你编程找出所有可行的道路,要求所走的路中没有重复的点,走时只能是上下左右四个方向。如果一条路都不可行,则输出相应信息(用 −1 表示无路)。优先顺序:左上右下。输入格式。
2024-02-08 14:40:14 1449 4
原创 C++:第十五讲高精度算法
在C++中当你用int、long long,甚至是unsigned long long 都无法处理的超级巨大数字,你会感到无比痛苦甚至到绝望,那么我们此时就只有一种方法了——高精度算法。我们可以利用程序设计的方法去实现这样的高精度计算。介绍常用的几种高精度计算的方法。本文主要实现的是自然数范围内做运算的加法、减法、乘法、除法四种基本高精度运算。高精度(High Precision)是一种在计算机编程中用于表示和操作大数的技术。在C++中,可以使用高精度思想来处理大数,例如质数、因数分解等。
2024-02-05 08:56:54 1758 18
原创 C++棋类小游戏2
MessageBox指的是显示一个模态对话框,其中包含一个系统图标、 一组按钮和一个简短的特定于应用程序消息,如状态或错误的信息。是改变字体及背景颜色,前一个x代表一个数字,可以改变背景颜色,后一个x代表一个数字,可以改变字体颜色 ,但都是根据颜色表来的。这是我写的最长的C++代码,希望大家喜欢,不要抄袭,任何。是在以下代码出现了很多次,system("cls")意思是清空屏幕。这是MessageBox函数的标准格式之一,本人喜欢用这种格式,注意函数的大小写!
2024-02-03 17:14:51 1384 12
原创 C++自创棋类小游戏
今天给大家带来我花了1周时间自创的小游戏,博主还是一名小学生,希望大家提提意见。这是我写的最长的C++代码,希望大家喜欢,不要抄袭,代码共1328行,任何编译器都可以。
2024-01-31 15:57:06 814 14
原创 【万题详解】洛谷P1135奇怪的电梯
链接——题目背景提供的一些数据。题目描述呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第 i 层楼(1≤i≤N)上有一个数字 Ki(0≤Ki≤N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如: 3,3,1,2,53,3,1,2,5 代表了 Ki(K1=3,K2=3,……),从 1 楼开始。在 1 楼,按“上”可以到 4楼,按“下”是不起作用的,因为没有 −2 楼。
2024-01-28 19:17:41 1240 11
原创 C++:第十四讲动态规划初步
今天带着大家学一个较难的算法——动态规划,简称动规(dp)动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。动态规划是一种解决复杂问题的优化策略,它通过对问题进行分而治之的技巧,特别是通过识别并利用子问题间的重叠特性,避免不必要的重复计算,从而达到高效求解的目的。具体来说,动态规划的核心思想是将原问题分解成若干个规模较小的子问题,通过求解这些子问题的最优解来间接获得原问题的最优解。
2024-01-26 11:26:51 1848 10
原创 【万题详解】洛谷P1510 精卫填海
事实上,东海未填平的区域还需要至少体积为 v 的木石才可以填平,而西山上的木石还剩下 n 块,每块的体积和把它衔到东海需要的体力分别为 k 和 m。最后我们就可以判断用全部的体力(也就是i==c)是否能填平,如果不能,就输出“Impossibel”,不然就一直向下找,直到找到刚好够填平时消耗的体力,用总体力一减,就是答案了,总代码只有20行,是不是很棒呢?有鸟焉,其状如乌,文首,白喙,赤足,名曰精卫,其名自詨。输出文件只有一行,如果精卫能把东海填平,则输出她把东海填平后剩下的最大的体力,否则输出。
2024-01-25 15:36:58 634 5
原创 【全网首发】洛谷贪心题解合集2
如果最大的a[r]不与最小的a[l]分在一组,而是a[r]与a[i]在一组,a[l]与a[j]在一组,因为a[l]=a[j],所以交换两者分组不影响后续选择,而a[r]如果不能与a[l]在一组,因为a[l]为当前最小值,所以a[r]只能单独为一组,所以贪心是 正确的。假定每个果子重量都为 1 ,并且已知果子的种类 数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。可以看出,所有的果子经过 n−1 次合并之后, 就只剩下一堆了。
2024-01-24 15:20:37 1184 4
原创 C++:第十三讲BFS广度优先搜索
今天带领大家学一下BFS。DFS可以看——C++:第十二讲DFS深搜(二)_c++匿名函数dfs-CSDN博客广度优先搜索(breadth-first search,缩写为bfs)又名宽度优先搜索,是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。BFS算法从问题的初始状态(起点)出发,根据状态转换规则(图结构中的边),遍历所有可能的状态(其他节点),直到找到终结状态(终点)。
2024-01-23 09:36:58 2436 12
原创 【百题详解】洛谷P8508 做不完的作业
同时请注意,即使睡觉时间满足了要求,Eric 也不能在第二天就完成任务 2,因为 Eric 必须睡觉。作业的总量是一定的,但不同作业下发的时间是不一定的,导致每天都要花不同的时间应付作业。Eric 再在第二天加班加点,完成剩下的任务,有 11 的时间睡觉。Eric 先在第一天做任务 1,总共消耗 1的时间,用 4时间睡觉,满足至少要 5×31=35 的时间睡觉的要求。证明:假设已求出前i−1 个任务的答案,若再插入一个有更优方案,则在前i−1 个时就应插入,矛盾。如果可以完成就完成,不能做就睡觉。
2024-01-14 08:16:09 1577
原创 【万题详解1】洛谷P1230 智力大冲浪
第二点,排完序后,就要考虑这个游戏放在那个时间来做,很明显,我们要先处理罚款大的项,而又尽量不影响后面的游戏,只能将这个游戏放在规定最晚完成的时间段0-t的最后面t来做,若后面已经有游戏正在进行,可以考虑t-1,直到0,如果还没有对它进行安排,则这个游戏主动放弃0。第二个数5,根据贪心的策略,我们把它放在F[5]的位置,却发现F[5]已经做过了,所以一直往前推,直到找到一个没有做过的位置,并改变这个位置的状态,所以F[4]也变成做过。第三个数1,根据贪心的策略,我们把它放在F[1]的位置。
2024-01-13 09:12:19 1265 1
原创 洛谷P1196 [NOI2002] 银河英雄传说
有30000条队列,总共n次操作,分M操作与C操作,M操作是把当前第i艘飞船所在的整条队列移到第j艘飞船艘所在的队列的最后面,C操作则是询问第i艘飞船与第j艘飞船是否在同一条队列,如果在则输出第i艘飞船与第j艘飞船之间的飞船数,不包括i和j,题目不保证j在i后面,否则就输出。先来分析一下这些指令的特点,很容易发现对于每个M指令,只可能一次移动整个队列,并且是把两个队列首尾相接合并成一个队列,不会出现把一个队列分开的情况,因此,我们必须要找到一个可以一次操作合并两个队列的方法。
2024-01-07 08:31:29 998 1
原创 C++:第十二讲DFS深搜(二)
搜索算法,就是利用计算机的高性能,对问题的“状态空间”进行枚举,穷举出一个问题的全部或者部分可能的情况,找到最优解或者统计合法解的个数。现在给你一个自然数 n,要求你求出n 的拆分成一些数字的和。注意:所有的中间结果须是整数,所以一些除法运算是不允许的(例如,(2 ×2)/4 是合法的,2×(2/4) 是不合法的)。2.用sp[i]表示第i行的摆放情况,.表示不可以放皇后,但是因为棋盘是从左向右的,而二进制数是从右向左的,所以sp[i]∣=(1<<(n−j))表示将第i行从左到右第j个格子置为不可放皇后。
2024-01-05 21:10:57 1700 6
原创 【全网首发】洛谷贪心题解集合
那么,我们就可以利用数组中前m个位置来储存相对应位置接水的人时间之和.这样的话,每次就可以先找m个接水位置中,当前时间之和最短的来装水(即把a[i]加到a[1](当前总用时最短的位置)),就OK啦!左手数字为a[i]和a[i+1],右手数字为b[i]和b[i+1]。两人的金币数为w[i]和w[i+1]。不难看出,在这个相邻的二元组中,前面的数不受后面的影响,而后面的金币数决定于w[i],a[i],b[i]。那么 w[i+1]=P[i-1]*a[i]/b[i+1]=w[i]*a[i]*b[i]/b[i+1]
2023-12-31 07:52:03 1580 2
原创 【全网首发】洛谷P2678 [NOIP2015 提高组] 跳石头
这里用了一点贪心的思想:因为如果不跳到第一个符合条件的点上,那么整个队列的稀疏度就会提高,最终需要删除的石头也会更多。接下来N 行,每行一个整数,第i 行的整数 Di(0
2023-12-30 07:36:56 560
原创 【全网首发】洛谷P1281书的复制
我们二分答案求出最少的复制时间,然后从第k∼1 个人、第 m∼1 本书开始给他们布置任务,如果当前人不能再抄更多的书了(再抄更多的书就要超出我们二分出的最短复制时间了)就换下一个人,这样使得后面的人抄尽可能多的书,前面的人就可以抄尽可能少的书。要使前面的人少抄写,也就是抄靠右边的书的娃要多抄。现在要把m本有顺序的书分给k个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三、第四本书给同一个人抄写。
2023-12-25 20:23:38 885
原创 C++:第十讲二分查找
很多人对二分感到很苦恼,很困惑,可能是因为二分的边界很难掌握,也许是判断条件难写…然而,很幸运,你找到了这篇文章,仔细看下去,这篇文章将带你学透二分!!!
2023-12-24 08:59:34 1776 3
原创 【全网首发】洛谷P1020 [NOIP1999 提高组] 导弹拦截
此时,在最优解中,把 x 一直到序列末尾,和 y 一直到序列末尾交换位置,这样做不影响正确性,也不增加序列个数,但会使 x 在最优解和贪心解中所处的位置相同。假设贪心解中 x 前面的数是 a,最优解中 x 前面的数是 b,a 后面的数是 y,由于贪心会让当前数接到大于等于它的最小数后面,所以 ,x,y≤a≤b。该定理在该问题上可以理解成:把序列分成不上升子序列的最少个数,等于序列的最长上升子序列长度。把序列分成不降子序列的最少个数,等于序列的最长下降子序列长度。显然,第一问求的是最长不上升子序列。
2023-12-23 09:01:18 653
原创 C++:下雪
在2023年12月15日——12月16日,我所在的地方下了第一场雪,于是我决定做一个用C++实现下雪花的场景,有兴趣的朋友可以学习一下哦!下雪(c++)
2023-12-16 09:01:25 581 4
原创 C++:第八讲贪心算法1
今天给大家讲一下贪心算法。贪心算法思想贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。在实际生活中,我们常常需要求解一些问题的最优解问题。贪心算法就是求解这一类问题的一种算法。它总是不断贪心地选取当前最优策略的算法。贪心算法的基本思想就是通过局部最优从而得到全局最优的解决方案。所有能使用贪心算法解决的问题,其实都是可以在数学上严格证明的,但是在程序设计竞赛中,快速解题是非常重要的。
2023-12-15 18:57:00 426 1
C++棋类小游戏4.0
2024-02-08
2023年余姚市小学生程序设计竞赛 提问
2024-05-10
关于#c++#的问题,请各位专家解答!
2024-01-13
洛谷P8508,40分
2024-01-03
c++:洛谷P1020 导弹拦截咋么做
2023-12-17
洛谷P1020 [NOIP1999 提高组] 导弹拦截
2023-12-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人