#青训营笔记创作活动# 问题描述
小F被神秘力量带入了一个魔幻世界,这里危机四伏。为了在异世界中生存,小F需要找到安全区。异世界可以被表示为一个大小为n x m的二维数组,每个格子的值代表该位置的危险程度。
小F的能力值为X,当某个格子的危险程度小于等于X时,这个格子是安全的。如果多个安全的格子相邻(上下左右连通),它们可以构成一个安全区。你需要帮助小F计算出一共有多少个安全区。
测试样例
样例1:
输入:n = 3, m = 3, X = 4, a = [[2, 3, 3], [3, 3, 3], [3, 3, 3]]
输出:1
样例2:
输入:n = 2, m = 2, X = 5, a = [[6, 6], [6, 4]]
输出:1
样例3:
输入:n = 3, m = 3, X = 3, a = [[1, 2, 2], [2, 3, 3], [3, 4, 5]]
输出:1
题解:
一个原二维数组,新建一个visited数组记录是否经过,直接全部遍历,遇到安全值小于能力值且没经过的点就进入while循环。while循环通过队列实现安全区域的搜寻,通过maxnum记录安全区域的个数。
#青训营笔记创作活动# 问题描述
小C遇到了 nn 个怪物,第 ii 个怪物的战斗力为 aiai,而小C的初始战斗力为 00。他需要依次与这些怪物战斗。战斗时的规则如下:
如果小C的战斗力 xx 小于怪物的战斗力 aiai,小C会触发被动技能 "小C不怕困难",将自己的战斗力提升至 aiai,并战胜这个怪物,同时小C的勇气值增加 ai−xai−x。
如果小C的战斗力 xx 大于或等于怪物的战斗力 aiai,他会直接战胜这个怪物,战斗结束后,小C的战斗力会降低至 aiai。
小C可以自由决定与怪物战斗的顺序。他想知道,在打败所有怪物后,自己能够累计提升的勇气值最大是多少。
测试样例
样例1:
输入:n = 2 ,a = [1, 2]
输出:2
样例2:
输入:n = 3 ,a = [1, 2, 2]
输出:3
样例3:
输入:n = 4 ,a = [3, 6, 2, 8]
输出:12
题解:
看到提升勇气值最大,开始觉得应该用动态规划,但是深入一想,要想使勇气值最大,就要实现自己的力量尽量小,打的怪物力量尽量大,并且通过力量最小的怪物刷新自己的力量值就能使力量差值尽量大,算是贪心的算法,但是我没证明其正确性就直接使用了,幸运的是AC了。
小C遇到了 nn 个怪物,第 ii 个怪物的战斗力为 aiai,而小C的初始战斗力为 00。他需要依次与这些怪物战斗。战斗时的规则如下:
如果小C的战斗力 xx 小于怪物的战斗力 aiai,小C会触发被动技能 "小C不怕困难",将自己的战斗力提升至 aiai,并战胜这个怪物,同时小C的勇气值增加 ai−xai−x。
如果小C的战斗力 xx 大于或等于怪物的战斗力 aiai,他会直接战胜这个怪物,战斗结束后,小C的战斗力会降低至 aiai。
小C可以自由决定与怪物战斗的顺序。他想知道,在打败所有怪物后,自己能够累计提升的勇气值最大是多少。
测试样例
样例1:
输入:n = 2 ,a = [1, 2]
输出:2
样例2:
输入:n = 3 ,a = [1, 2, 2]
输出:3
样例3:
输入:n = 4 ,a = [3, 6, 2, 8]
输出:12
题解:
看到提升勇气值最大,开始觉得应该用动态规划,但是深入一想,要想使勇气值最大,就要实现自己的力量尽量小,打的怪物力量尽量大,并且通过力量最小的怪物刷新自己的力量值就能使力量差值尽量大,算是贪心的算法,但是我没证明其正确性就直接使用了,幸运的是AC了。
展开
评论
点赞