- 博客(16)
- 收藏
- 关注
原创 P2240 【深基12.例1】部分背包问题
再说回这道题,我们要求怎么拿才能拿走最大价值的金币,每一堆金币有它的质量和价值,因为我们能那部分的,所以我们是可以将其按比例来算的,每一m占多少v,比例越大,我们就越先选,不管后面的够不够,现在面对的是最大的,我们就选它,直到装不下或者选完了,我们才考虑下一个。这就是我们的贪心思路,先考虑比例大的。贪心算法,跟它的名字一样,贪,也就是总是做出在当前看来是最好的选择,而不从整体最优上加以考虑,只考虑眼前的利益,有用我们就要。接着就是进行贪心的思路,如果我们还装得下全部,那就全部装最大的,再去装第二大的;
2024-08-18 01:44:47
498
原创 P3612 [USACO17JAN] Secret Cow Code S
那么n指向前一半的那一位置要怎么确定呢?这里就分为两种情况:(1)n指的是后一半的第一位 (2)n指的是后一半的其他位。(1)如果是第一位的话,n就直接等于t,因为首位其实是操作前的末位,t是字符串长度,同时也是末位的位置。(2)如果是其他位的话,那么n -= t+1
2024-08-14 23:41:13
1085
原创 P1048 [NOIP2005 普及组] 采药(01背包问题)
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”如果你是辰辰,你能完成这个任务吗?
2024-08-12 12:08:36
1820
原创 P1164 小A点菜
函数的参数有两个,一个是搜索到第几个菜品,另一个是手里还剩的钱数。买的话,那么我们花的钱数就得加上money[i] , 所以我们要满足刚好把 j 元花完的情况的话,我们考虑的方案数就得是拥有钱数 j - money[i] 在面对i-1个菜品时的方案数cnt[i-1][j-money[i]](注意这与刚好钱数相等的情况不同,递归的话,会比较绕,大家可以在草稿纸上进行模拟,从(0,m)开始,如果买得起就分为两支,一支是要买(1,m - money),一支是不买(1,m),买不起就只有一支:不买(1,m)。
2024-08-08 20:54:46
1599
原创 P1002 [NOIP2002 普及组] 过河卒
我们建立一个二维数组count,count(i,j)表示从起点到(i,j)的路径数,我们初始化count(0,0) = 1,有题目可以知道过河卒只能向下和向右走,所以count(i,j)的步数只由count(i-1,j)和count(i,j-1)来决定,所以count(i,j)也就等于count(i-1,j)与count(i,j-1)之和,即count(i,j)=count(i-1,j)+ count(i,j-1)。棋盘用坐标表示,A 点 (0,0)、B 点 (n,m),同样马的位置坐标是需要给出的。
2024-08-06 00:43:33
531
原创 P1255 数楼梯
这道题的题干很简单,就是我们可以跳一步或者跳两步,然后求出到第n层有几种方式。这道题有两种解决思路:动态规划和递归方法解决。
2024-08-03 14:23:17
766
1
原创 P1088 [NOIP2004 普及组] 火星人
后面我再重新想了一下,我们为何一定得找出火星人表示的数字是我们正常数字的几,如果它是一个很大很大的数字,那么我们前面就需要递归很多次,但这些都没有什么用处,我们何不直接从火星人表示的数字出发,然后加上一个cnt来记录是火星人表示的数字的后面第几个,当从cnt == M时,就是我们所需要的那个数字啦,然后就直接输出就完事了。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小的数字加到这个大数上面,把结果告诉火星人,作为人类的回答。
2024-07-31 15:13:47
792
原创 高精度问题
高精度问题通常指的是处理超出标准数据类型(如intlong等)所能表示的范围的数值计算问题。由于计算机中的整数类型有固定的位数和范围限制,当需要进行大数运算或者高精度计算时,标准数据类型高精度问题常见于以下场景:大数加法:多个大数相加时,结果也可能超出标准整数类型的最大值。大数乘法:当两个大数相乘时,结果可能超出int或long的最大值。大数阶乘:在某些算法中,可能需要进行大数除法,以得到精确的商和余数。大数幂运算:计算一个数的幂次方,结果可能是一个非常大的数。
2024-07-31 00:04:18
1986
原创 P1851 好朋友
在这里,一个数的约数不包括这个数本身。试除法说完了,就来看看这道题的要求,要找到n后第一对”非常好友“,即A 的序列号的约数之和恰好等于 𝐵 的序列号,B 的序列号的约数之和恰好等于 A 的序列号。起初我是想把每个数的约数和记录下来,然后i = n开始遍历,寻找是否有i等于其中一个的约数和,但是这种办法太费时了,后面我就想到,为何不直接再加一个试除法对,i的约数和进行约数相加,再判断其约数和是否等于i即可,同时还要sum1!求一个数的约数,我用的是试除法,一般求一个数的所有约数使用试除法是比较方便的算法,
2024-07-28 00:44:49
343
原创 P1739 表达式括号匹配
所以我就多加了两个if语句进行判断,先说“( ”,"(" 要注意的是判断 "(" 后面还有没有 ")" ,如果没有的话就是错的,这个得先判断总数,再++,因为"("是在得在前面的,你先算进去,就在出现顺序上的错误时,仍然判对,即是类似这样的情况,((a+2)*(b-1)))*2(@,这里在最后一个“(”前有3个“( ”但是有4个“)”,所以如果先加上了这个“( ”那么cnt==0,就会判对,但是它顺序是错的。例如这种情况)a*b(@,在”) “前面一定得有”( “所以得先++。作为表达式的结束符。
2024-07-25 23:24:19
249
原创 P2036 [COCI2008-2009 #2] PERKET
这道题也是可以使用dfs进行所有情况的遍历,不过这道题增加了点小难度,它没有限制达到目标所需的元素个数,所以我们需要从1遍历到 n,如何实现呢?在这里要提醒一下,这些食物是携带一酸度和一苦度的,同一行酸度和苦度不是分离的,我一开始以为是各算各的,想了很久最后在发现题目没审好( 所以还是要好好审题啊๛ก(ー̀ωー́ก) )对呀酸度,总的酸度为每一种配料的酸度总乘积;对于苦度,总的苦度为每一种配料的苦度的总和。对于 100% 的数据,有 1≤𝑛≤10,且将所有可用食材全部使用产生的总酸度和总苦度小于 1×。
2024-07-25 01:02:36
400
原创 P1036 [NOIP2002 普及组] 选数
这道题与P1157 组合的输出问题类似,只是多了个判断素数,基本思路就是对元素进行组合,按照要求一共有n个元素,每个组合有k个元素,我们就从这n个元素中选取k个记录,然后再进行判断这k个元素的和是否为素数,是就cnt+1,不是就下一个。已知 𝑛n 个整数 𝑥1,𝑥2,⋯ ,𝑥𝑛,以及 1 个整数 𝑘(𝑘
2024-07-24 00:35:58
228
原创 P1157 组合的输出
既然这样我们就可以在dfs这个递归函数中添加一个形参start,来记录这层递归的开始数是多少,因为元素相同,顺序不同是算同种答案,那么我们对于这个起始值是不断增大的,它就不会出现元素相同,但是顺序不同的情况了。这时代码就做了一些小改动,我们不再需要book数组来记录是否用了这个元素,因为遍历的时候是一直向前递归的,dfs(int temp,int start)中的start是一直增大的,不可能出现重复的情况。,𝑛,从中任取 𝑟 个数。一行两个自然数 𝑛,𝑟(1<𝑛<21,0≤𝑟≤𝑛)。
2024-07-23 00:48:13
453
原创 P1706 全排列问题
以下是dfs的基本框架,我将其分为两种,一种是像这道题一样的,即使数字一样,但是顺序不同,仍然视作不同答案,如: 1 2 3 和 3 2 1。再进入第三个递归,temp = 2,if (temp == n)语句不成立,进去for循环,i = 1,book[1]!再进入第二个递归,temp = 1,if (temp == n)语句不成立,进去for循环,i = 1,book[1]!temp = 0进入递归,if (temp == n)语句不成立,进去for循环,i = 1,book[1]!
2024-07-21 01:05:39
382
原创 P3654 First Step (ファーストステップ)【暴力枚举】
这道题也是一道暴力枚举的题目,思路比较清晰,直接将横向,纵向两个方向进行遍历,即可得出结果,不过要考虑特殊情况,即在K=1时,横向和纵向是同一种情况,只要遍历一种情况即可。我们 Aqours 现在已经一共有 K 个队员了,要歌唱舞蹈起来的话,我们得排成一条 1×K 的直线,一个接一个地站在篮球场的空地上呢 (横竖均可)。对于所有数据,1≤𝑅,𝐶≤1001≤R,C≤100,1≤𝑘≤min(𝑅,𝐶)1≤k≤min(R,C)。Aqours 的真正的粉丝的你,能帮我们算算吗?里面堆满了学校的各种杂物呢……
2024-07-20 02:09:00
601
1
原创 P3392 涂条纹 【暴力枚举】
涂条纹题目描述只要一个由 N × M 个小方块组成的旗帜符合如下规则,就是合法的图案。从最上方若干行(至少一行)的格子全部是白色的;接下来若干行(至少一行)的格子全部是蓝色的;剩下的行(至少一行)全部是红色的;现有一个棋盘状的布,分成了 N NN 行 M MM 列的格子,每个格子是白色蓝色红色之一,小 a 希望把这个布改成合法图案,方法是在一些格子上涂颜料,盖住之前的颜色。小 A 很懒,希望涂最少的格子,使这块布成为一个合法的图案。输入格式。
2024-07-19 13:48:34
332
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人