石头阅读理解答案或石头阅读破解版

2024-07-31 18:31:19
手游排行榜网 > 游戏攻略 > 石头阅读理解答案或石头阅读破解版

2023-04-20:有一堆石头,用整数数组 stones 表示

其中 stones[i] 表示第 i 块石头的重量。

每一回合,从中选出任意两块石头,然后将它们一起粉碎

假设石头的重量分别为 x 和 y,且 x <= y

那么粉碎的可能结果如下:

如果 x == y,那么两块石头都会被完全粉碎;

如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。

最后,最多只会剩下一块 石头。

返回此石头 最小的可能重量。

如果没有石头剩下,就返回 0。

答案2023-04-20:

算法流程:

1. 遍历一遍所有石头,计算石头总重量 `sum`;

2. 计算目标重量 `target = sum / 2`;

3. 使用动态规划求解在限制条件下可以得到的最大重量;

4. 返回石头总重量减去两堆石子的总重量之差,即为最小重量差。

动态规划过程:

1. 定义状态:设 `dp[i][j]` 表示前 `i` 个石头在限制条件下可以得到的最大重量;

2. 初始化状态:`dp[0][j] = 0`,表示前 0 个石头在限制条件下无法得到任何重量;`dp[i][0] = 0`,表示在不限制目标重量的情况下无法得到任何重量;

3. 状态转移方程:对于第 `i` 个石头,有两种选择:取或不取。若不取,则当前石头对总重量贡献为0,即 `dp[i][j] = dp[i-1][j]`。若取,则当前石头会对总重量产生贡献,贡献值为当前石头重量 `stones[i-1]` 加上前 `i-1` 个石头在目标重量为 `j - stones[i-1]` 下可以得到的最大重量 `dp[i-1][j-stones[i-1]]`,即 `dp[i][j] = dp[i-1][j-stones[i-1]] + stones[i-1]`。因此可以得到状态转移方程:

```

dp[i][j] = max(dp[i-1][j], dp[i-1][j-stones[i-1]]+stones[i-1])

```

4. 最终结果:返回 `sum - 2 * dp[n][target]`。

其中,`max` 函数用于计算两个整数中的较大值。

注意:由于题目要求粉碎的重量差最小,因此需要将石头分为两组,使它们的重量之差最小。因此在计算完一组石头的最大重量后,还需要用总重量减去两堆石子的总重量之差,以得到另一组石头的重量。

时间复杂度:该算法使用了动态规划方法,在遍历石头和目标重量的过程中,对于每个子问题都需要计算一次最大重量,因此时间复杂度为 $O(n \times \text{half})$,其中 $n$ 是石头数量,$\text{half}$ 是目标重量的一半。

空间复杂度:在使用动态规划求解最大重量的过程中,需要使用一个二维数组 `dp` 来保存所有子问题的计算结果。因此空间复杂度为 $O(n \times \text{half})$。但由于每次迭代只需要使用到上一次迭代的结果,因此可以使用滚动数组将空间复杂度优化到 $O(\text{half})$。

# go完整代码如下:

package main import "fmt" func lastStoneWeightII(stones []int) int { n := len(stones) sum := 0 for _, num := range stones { sum += num } half := sum / 2 dp := make([][]int, n+1) for i := range dp { dp[i] = make([]int, half+1) } for i := n - 1; i >= 0; i-- { for rest := 0; rest <= half; rest++ { p1 := dp[i+1][rest] p2 := 0 if stones[i] <= rest { p2 = stones[i] + dp[i+1][rest-stones[i]] } dp[i][rest] = max(p1, p2) } } return sum - dp[0][half]*2 } func max(x, y int) int { if x > y { return x } return y } func main() { stones := []int{2, 7, 4, 1, 8, 1} fmt.Println(lastStoneWeightII(stones)) // expected output: 1 stones = []int{31, 26, 33, 21, 40} fmt.Println(lastStoneWeightII(stones)) // expected output: 5 }

# rust代码如下:

fn last_stone_weight_ii(arr: Vec) -> i32 { let n = arr.len(); let sum = arr.iter().sum::(); let half = sum / 2; let mut dp = vec![vec![0; half as usize + 1]; n + 1]; for i in (0..n).rev() { for rest in 0..=half { let p1 = dp[i + 1][rest as usize]; let mut p2 = 0; if arr[i] <= rest as i32 { p2 = arr[i] + dp[i + 1][(rest - arr[i]) as usize]; } dp[i][rest as usize] = p1.max(p2); } } (sum - dp[0][half as usize] * 2) as i32 } fn main() { let stones = vec![2, 7, 4, 1, 8, 1]; let ans = last_stone_weight_ii(stones); println!("{}", ans); // 输出 1 let stones = vec![31, 26, 33, 21, 40]; let ans = last_stone_weight_ii(stones); println!("{}", ans); // 输出 5 }

书名《相信》

作者:蔡磊,京东集团原副总裁,渐冻症抗争者

为什么选择这本书,我是被封面上的一句话吸引“纵是不敌,也绝不屈服”

第五章疯狂的石头

这一章读完我有些伤感。

开篇用了2021年11月11日国家医保药品目录谈判现场“灵魂砍价”的故事情节。脊髓性肌萎缩诺西那生钠注射液,一款治疗脊髓型肌萎缩的药物,通过“灵魂砍价”把价格从70万元 砍到3.3万元除去医保报销自费大概一万元。

我原来看着到这新闻也只是当一般的新闻看,我又把视频看了一遍,感触很深。“灵魂砍价”,为的是多省点钱,医保资金毕竟有限,如何让其发挥更大作用,更好用在“刀刃”上,事关国计民生,意义重大。为了更好普惠人民群众,工作人员可谓殚精竭虑。“灵魂砍价”反映了我国始终把人民生命安全和身体健康放在第一位。

同时也介绍了这款药物能够成功的核心节点—阿里娅的父母。他们不断地链接资源,将科研与商业链接,将智力与财力链接,将实验室与真实社会链接,才触发并推动了—科技进步。当蔡磊看到这个故事的时候,他也在做着同样的事情。他要做的不是制药而是整合资源。让自己做这个链条中的核心节点。然而对于他来说,不管是从病理上还是从经济上,他都比阿里娅的父母要更加艰难。虽然网友评论“亿万身家的京东副总裁蔡磊患绝症,砸千万求生”,但是蔡磊目前所做的何止千万,而是以亿为单位啊。对于我这样的小人物来说可以说是天文数字。除了金钱更加无法奢望的是“时间”。那时他已经发病两年多。

但是读完前四章给我得感觉蔡磊并不是患者,他能给予你无限希望。他不断地接触和主动寻找神经再生领域的专家。终于他遇见了陈功教授,并且通过他得努力打动了这位教授。一切准备就绪,就差资金做进一步的研发和转化。蔡磊开始路演。

书中写到“过去10年,我参加过京东大大小小多个项目融资,从几千万到上百亿都有。京东多个业务板块在融资时,社会各界的投资机构,投资人不少是主动找来,请求获得投资的机会。那是我熟悉的融资的节奏,我认为哪怕没有主动找来,至少也会吸引一些投资者。”然而,当“名单”已被划掉一半,虽然他没有写他得挫败,但是从字里行间能够感受到无助。就是这样他虽然卸下了京东部分工作,但是他变的更忙了。有位细心的采访者观察:蔡磊从下午两点到七点嘴几乎就没停过,因为路演以演讲为主。要感染别人,打动别人。到了此处他仍然没有解决资金的问题。

但是在这两天有网友评论我的文章让我去看,为了筹措研发经费,蔡磊通过抖音平台开通了“蔡磊破冰驿站直播间”,补充经费不足。看到蔡磊积极努力的状态,我更加相信希望和奇迹都会有。



作者:piikee | 分类:游戏攻略 | 浏览:20 | 评论:0