- 博客(14)
- 收藏
- 关注
原创 4137:最小新整数
给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。现在从m位中删除k位(0<k < m),求生成的新整数最小为多少?例如: n = 9128456, k = 2, 则生成的新整数最小为12456。
2024-07-23 11:53:15
239
原创 1012:Joseph
用一个int型的num来存现存人数,再用一个int型的pos来存当前报数的人的位置,然后就让pos+=m,随后更新num和pos,如果pos<k的话说明好人死了,该m不成立,否则就一直循环下去,如果一直到num==k好人都没死的话,说明这个m符合要求,就可以输出了。想法很简单,时间复杂度也不是很高,但是当我写完提交的时候却显示tle。这样就导致对于一个k会一直从头开始算m,然后时间就会叠的很久。后面就用一个dp数组存结果,先把1到13全算完然后根据输入来输出dp[k],然后就过了,耗时也很短。
2024-07-06 11:16:39
475
原创 4115:鸣人和佐助
佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢?已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置。地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大蛇丸的手下才能到这些位置。鸣人有一定数量的查克拉,每一个单位的查克拉可以打败一个大蛇丸的手下。假设鸣人可以往上下左右四个方向移动,每移动一个距离需要花费1个单位时间,打败大蛇丸的手下不需要时间。如果鸣人查克拉消耗完了,则只可以走到没有大蛇丸手下的位置,不可以再移动到有大蛇丸手下的位置。佐助在此期间不移动,大蛇丸的手下也不移动。
2024-07-03 21:10:41
587
原创 1023:The Fun Number System
所以,此时我们还需要进行一次检验,如果二者相等,就输出所得二进制数,如果二者不相等,则说明不存在一个k位的二进制数,使其在给定规则下等于N,此时就应该输出“Impossible”(可以从充分必要性的角度证明)。不一会儿,我就发现,我们要求的二进制数的第0位的值是直接由N的奇偶决定的,不受其他因素的影响,详细一点说就是,如果N为偶数,那么所求数的第0位必为0,否则在其他位上无法匀出一个1来与其相消,相应的,如果N为奇数,那么所求数的第0位必为1,否则在其他位上无法出现一个1来使N为奇数。
2024-07-03 11:17:04
1414
原创 1476:Always On the Run
这道题的输入首先是一行n和k,然后是n(n-1)行,每一行代表一趟航班,第一个数为d,表示费用循环周期,接下来d个数,其中第i个表示第i天该趟航班的费用,为0表示没有航班。输出旅行k天最后到达第n个城市的最小费用。考虑定义一个结构体flight,用flight f[i][j]表示从第i个城市去往第j个城市的航班费用情况,其中包含循环天数d,每天的费用cost;用dp[i][j]来表示第i天在第j个城市的情况下,接下来的最小费用。这是一道比较明显的动规题,主要就是弄懂题目意思比较麻烦。1、从第1个城市出发。
2024-07-02 21:59:07
1436
原创 动态规划之——鹰蛋
我们假设第一次在第i层楼扔蛋,有两种情况:第一种,蛋没碎,说明目标楼层在下方的i - 1层楼中,此时还剩M个蛋,于是,所求次数为1 + f[M][i - 1];我们不妨定义一个新的数组g[i][j],用以表示在有j个蛋的情况下,尝试i次最多可以确定的楼层数,我们考虑在某一层楼扔下一个蛋,仍有两种情况:第一种,蛋没碎,此时,我们需要向上确定楼层数,能够向上确定的楼层数为g[i - 1][j];于是,我们可以得到:g[i][j] = g[i - 1][j] + g[i - 1][j - 1] + 1。
2023-12-20 22:14:23
2403
1
原创 利用高精度数组求阶乘之和
这时,我们发现,n!要计算高精度数组的乘法,我们需要利用到乘法分配律的思想:将大数分解成a[0]+a[1]*10+a[2]*100+······+a[N]*10^N,然后分别与乘数相乘,最后再相加即可。首先,我们定义一个数组a[N]来表示一个大数,其中,a[0]表示这个大数的个位,a[1]表示这个大数的十位,······以此类推。注意,由于无法确定大数的位数,为了便于接下来的运算,在表示大数时,数组的顺序与大数的正常顺序是相反的,需要读者格外注意。+······+n!
2023-12-03 20:52:11
444
1
原创 铺地毯问题
现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。接下来的 n 行中,第 i+1 行表示编号 i 的地毯的信息,包含四个整数 a,b,g,k,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标 (a,b) 以及地毯在 x 轴和 y 轴方向的长度。2、对于每张地毯,其左下角坐标为a,b,其在x,y方向上的长度分别为g,k,也就是说,它能够覆盖到的区域的横坐标取值范围为[a,a + g],纵坐标取值范围为[b,b + k]。输入共 n+2 行。
2023-12-03 18:21:43
178
1
原创 递归问题之——平衡矩阵
这题的思路其实不难,就是令第一行不动,然后不断地把后面的某一行左移,然后求各列和的最大值,最后在好多个最大值中选出最小的那个就好了。具体地说,对于第二行,有如下几种情况:不左移、左移1次、左移2次······左移n-1次,然后分别对于这几种情况来穷举第三行的移动情况······以此类推,就可以穷举出所有的移动情况了。现在有一个n阶正整数方阵(n<=7),现在可以对矩阵的任意一行进行左移,具体操作为:每次对于某一行a_i1,a_i2,…对于每组数据,第一行为一个正整数n(1<=n<=7),代表矩阵的阶。
2023-12-01 21:57:23
296
1
原创 全排列——利用递归进行穷举的典型案例
通过读题,我们可以发现,题目要求字母序比较小的排列在前面,因此,对于每种排列的第一个字母,其顺序为a,b,c......那么,我们不妨先把排列中的第一个字母定下来,然后我们需要做的事情就是对剩余的n-1个元素进行全排列了。落实到实际的操作中,我们所作的就是按照从前往后的顺序把给定字符串中的某一个元素挑出来,放入一个新的字符串中,然后对剩余的字符串重复上面的操作,直到字符串中仅剩1个元素,这时便可以将新的字符串输出。输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。
2023-12-01 19:00:38
203
1
原创 水淹七军——一种很新的迷宫问题
接下来的思路就很简单了:先构造一个struct来表示地图上某点的高度和被淹情况,然后从第一个输入的放水点开始(为了节省时间,在开始递归之前可以先判断一下放水点与司令部的高度关系,如果高度低于司令部就直接continue),然后开始递归(类比迷宫),如果达到司令部就返回1。3、对于地图上的每个点,都有两方面的状态:一是该点的高度,二是该点是否被水淹,因此可以考虑利用struct来表示每个点的状态。随着最后通牒的递出,C国的总攻也开始了,由于C国在地形上的优势,C国总司令下令采用水攻,剿灭A国最后的有生力量。
2023-11-24 19:46:19
328
1
原创 c++递归问题之——矩阵归零消减序列和
通过读题,可以发现,本题的总体思路就是定义一个函数来实现矩阵的归零、消减以及a[1][1]的求和,然后将该函数不断递归直到矩阵仅剩1行1列。值得注意的是,在归零步骤中,并不是把每一行都减去其中的最小值就可以的,我们还需要判断在完成以上操作后是否能实现矩阵的每行每列都至少有一个元素的值为0,如果不满足条件,则我们还需要对每一列也进行归零操作。然后对矩阵进行消减:即把n*n矩阵的第二行和第二列删除(如果二维数组为a[][],则删除的是a[1][1]所在的行和列),使之转换为一个(n-1)*(n-1)的矩阵。
2023-11-18 22:48:30
528
1
原创 c++ 递归问题之——合理消费
且价格顺序按照输入顺序,则在第i次购买时,若购买的是aj,则在第i+1次购买时,购买的物品必然是aj或aj之后的物品,由此可找出前后两次购买之间的联系。由于物品可以购买多次,所以很自然地想到新定义一个数组b[10]来记录ai物品被购买的次数,从而在输出时,可以通过读取b[10]中的数据来决定某一个物品要输出的次数。已知B的饭卡里有钱p元,给定食堂物品的价格列表(价格不重复),请你给出所有可能的恰好把p元花掉的购买选择。满足:3<= n <= 10;接下来有n行,每行一个数,为每种物品的价格xi。
2023-11-17 23:43:08
363
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅