涉过愤怒的海 (2023)
类型: 剧情 / 悬疑 / 犯罪
豆瓣评分:7.2
推荐指数:⭐⭐⭐⭐
影视介绍
该片改编自老晃同名小说《涉过愤怒的海》,讲述了一个父亲在女儿遭杀害之后一个人踏上复仇之路的故事。
老金(黄渤 饰)为供女儿金丽娜(周依然
饰)留学终日捕鱼,却换来女儿身中17刀离奇身亡的死讯,最大嫌疑人则指向她的男友李苗苗(张宥浩
饰)。愤怒的老金踏上跨海寻仇之路,李苗苗却在母亲景岚(周迅
饰)的庇护下不断潜逃……这场人性迷局中,究竟谁能抵达爱与宽恕的彼岸?
剧集特色
主题寓意叙事手法光明网评《涉过愤怒的海》具有不可磨灭的现实意义,曹保平敏锐地捕捉到这些本就属于真实生活的关键字眼,并在富有冲击性的视听调度中,达成了对原生家庭巨大穹顶之下人性晦暗、阶级差异与亲情创伤等诸多主题的叩问,阐释了一种超越普适性意义价值的道德情感追索。“愤怒”,或者说“涉愤怒之海”成为影片基本的叙事线索。人物最初的复仇动机是很容易被辨识的。为了找到凶手,老金远赴日本,踏上了寻凶复仇之路。表面上看,老金的愤怒来自女儿的死于非命,但其潜在的复仇动机,则来自于“她是 ...
抓娃娃 (2024)
类型: 喜剧
豆瓣评分:7.4
推荐指数:⭐⭐⭐⭐⭐
影视介绍
该片讲述生活在西虹市的富翁马成钢和春兰夫妇,为了将儿子马继业培养成合格的家族接班人,决定隐藏真实财富、开启反向养娃之路的故事。
困苦的爹,辛劳的妈,破烂的院子,破碎的他。西虹市做大做强的路上怎么把老马家落下了?!
“汤里没油,兜里没子”的马成钢(沈腾 饰)和春兰(马丽
饰),赶驴打工,家徒四壁,而儿子马继业(肖帛辰
饰)则是他们逆天改命的唯一希望。小马很争气,年年好成绩,一点不娇气,意志贼坚毅。但随着小马(史彭元
饰)一天天长大,他却逐渐发现身边的人们都越来越不对劲……
剧集特色
主题寓意第一财经评澎湃新闻评《南方人物周刊》评马成钢(沈腾饰)是西虹市的超级大富翁,大儿子被“养废了”,马成钢就决定将他与第二任妻子春兰(马丽饰)所生的二儿子马继业(史彭元饰)培养成合格的接班人。为了避免马继业沉溺于奢华生活,失去奋斗的动力,马成钢夫妇选择一条非同寻常的道路。在马继业还不记事的时候,他们决定隐藏自己的真实财富,搬到马成钢小时候长大的破落大院里生活,在儿子面前扮演 ...
Alpha-Beta 剪枝
此页面将简要介绍 minimax 算法和 剪枝。
Minimax 算法
定义
Minimax
算法又叫极小化极大算法,是一种找出失败的最大可能性中的最小值的算法。
在局面确定的双人对弈里,常进行对抗搜索,构建一棵每个节点都为一个确定状态的搜索树。奇数层为己方先手,偶数层为对方先手。搜索树上每个叶子节点都会被赋予一个估值,估值越大代表我方赢面越大。我方追求更大的赢面,而对方会设法降低我方的赢面,体现在搜索树上就是,奇数层节点(我方节点)总是会选择赢面最大的子节点状态,而偶数层(对方节点)总是会选择我方赢面最小的的子节点状态。
过程
Minimax
算法的整个过程,会从上到下遍历搜索树,回溯时利用子树信息更新答案,最后得到根节点的值,意义就是我方在双方都采取最优策略下能获得的最大分数。
解释
来看一个简单的例子。
称我方为 MAX,对方为 MIN,图示如下:
例如,对于如下的局势,假设从左往右搜索,根节点的数值为我方赢面:
我方应选择中间的路线。因为,如果选择左边的路线,最差的赢面是
3;如果选择中间的路线,最差的赢面是 ...
Dancing Links
本页将介绍精确覆盖问题、重复覆盖问题,解决这两个问题的算法「X
算法」,以及用来优化 X 算法的双向十字链表 Dancing
Link。本页也将介绍如何在建模的配合下使用 DLX 解决一些搜索题。
更多细节:Dancing
Links
精确覆盖问题
定义
精确覆盖问题(英文:Exact Cover Problem)是指给定许多集合 以及一个集合 ,求满足以下条件的无序多元组 :
解释
例如,若给出
则
为一组合法解。
问题转化
将
中的所有数离散化,可以得到这么一个模型:
给定一个 01
矩阵,你可以选择一些行(row),使得最终每列(column)都恰好有一个 1。
举个例子,我们对上文中的例子进行建模,可以得到这么一个矩阵:
其中第 行表示着 ,而这一行的每个数依次表示 。
实现
暴力 1
一种方法是枚举选择哪些行,最后检查这个方案是否合法。
因为每一行都有选或者不选两种状态,所以枚举行的时间复杂度是 的;
而每次检查都需要
的时间复杂度。所以总的复 ...
IDA*算法
前置知识:A* 算法、迭代加深搜索。
IDA * 为采用了迭代加深算法的 A * 算法
优点
不需要判重,不需要排序,利于深度剪枝。
空间需求减少:每个深度下实际上是一个深度优先搜索,不过深度有限制,使用
DFS 可以减小空间消耗。
缺点
重复搜索:即使前后两次搜索相差微小,回溯过程中每次深度变大都要再次从头搜索。
伪代码
123456789101112131415161718Procedure IDA_STAR(StartState)Begin PathLimit := H(StartState) - 1; Succes := False; Repeat inc(PathLimit); StartState.g = 0; Push(OpenStack, StartState); Repeat CurrentState := Pop(OpenStack); If Solution(CurrentState) then Success = True Else ...
迭代加深搜索
定义
迭代加深是一种 每次限制搜索深度的 深度优先搜索。
解释
迭代加深搜索的本质还是深度优先搜索,只不过在搜索的同时带上了一个深度
,当
达到设定的深度时就返回,一般用于找最优解。如果一次搜索没有找到合法的解,就让设定的深度加一,重新从根开始。
既然是为了找最优解,为什么不用 BFS 呢?我们知道 BFS
的基础是一个队列,队列的空间复杂度很大,当状态比较多或者单个状态比较大时,使用队列的
BFS 就显出了劣势。事实上,迭代加深就类似于用 DFS 方式实现的
BFS,它的空间复杂度相对较小。
当搜索树的分支比较多时,每增加一层的搜索复杂度会出现指数级爆炸式增长,这时前面重复进行的部分所带来的复杂度几乎可以忽略,这也就是为什么迭代加深是可以近似看成
BFS 的。
过程
首先设定一个较小的深度作为全局变量,进行 DFS。每进入一次
DFS,将当前深度加一,当发现 d 大于设定的深度
就返回。如果在搜索的途中发现了答案就可以回溯,同时在回溯的过程中可以记录路径。如果没有发现答案,就返回到函数入口,增加设定深度,继续搜索。
1234567I ...
优化
前言
DFS(深度优先搜索)是一种常见的算法,大部分的题目都可以用 DFS
解决,但是大部分情况下,这都是骗分算法,很少会有爆搜为正解的题目。因为
DFS 的时间复杂度特别高。(没学过 DFS 的请自行补上这一课)
既然不能成为正解,那就多骗一点分吧。那么这一篇文章将介绍一些实用的优化算法(俗称「剪枝」)。
先来一段深搜模板,之后的模板将在此基础上进行修改。
1234567891011int ans = 最坏情况, now; // now 为当前答案void dfs(传入数值) { if (到达目的地) ans = 从当前解与已有解中选最优; for (遍历所有可能性) if (可行) { 进行操作; dfs(缩小规模); 撤回操作; }}
其中的 ans
可以是解的记录,那么从当前解与已有解中选最优就变成了输出解。
剪枝方法
最常用的剪枝有三种,记忆化搜索、最优性剪枝、可行性剪枝。
记忆化搜索
因为在搜索中,相同的传入值往往会带来相同的解,那我们就可以用数组来记忆,详见
记忆化搜索。
模板:
1 ...
A*搜索
A * 搜索算法(英文:A*search algorithm,A * 读作 A-star),简称 A *
算法,是一种在图形平面上,对于有多个节点的路径求出最低通过成本的算法。它属于图遍历(英文:Graph
traversal)和最佳优先搜索算法(英文:Best-first search),亦是 BFS
的改进。
八数码难题
题目描述
在
的棋盘上,摆有八个棋子,每个棋子上标有 至 的某一数字。棋盘中留有一个空格,空格用
来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为
),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。
输入格式
输入初始状态,一行九个数字,空格用 表示。
输出格式
只有一行,该行只有一个数字,表示从初始状态到目标状态需要的最少移动次数。保证测试数据中无特殊无法到达目标状态数据。
样例 #1
样例输入 #1
1283104765
样例输出 #1
14
提示
样例解释
图中标有
的是空格。绿色格子是空格 ...
启发式搜索
[NOIP2005 普及组]
采药
题目描述
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”
如果你是辰辰,你能完成这个任务吗?
输入格式
第一行有 个整数 ()和 (),用一个空格隔开, 代表总共能够用来采药的时间, 代表山洞里的草药的数目。
接下来的 行每行包括两个在
到 之间(包括 和 )的整数,分别表示采摘某株草药的时间和这株草药的价值。
输出格式
输出在规定的时间内可以采到的草药的最大总价值。
样例 #1
样例输入 #1
123470 371 10069 11 2
样例输出 #1
13
提示
【数据范围】
对于 的数据,;
对于全部的数据,。
【题目来源】
NOIP 2 ...
双向搜索
定义
双向同时搜索的基本思路是从状态图上的起点和终点同时开始进行 广搜 或
深搜。
如果发现搜索的两端相遇了,那么可以认为是获得了可行解。
过程
双向广搜的步骤:
1234567891011121314151617将开始结点和目标结点加入队列 q标记开始结点为 1标记目标结点为 2while (队列 q 不为空){ 从 q.front() 扩展出新的 s 个结点 如果 新扩展出的结点已经被其他数字标记过 那么 表示搜索的两端碰撞 那么 循环结束 如果 新的 s 个结点是从开始结点扩展来的 那么 将这个 s 个结点标记为 1 并且入队 q 如果 新的 s 个结点是从目标结点扩展来的 那么 将这个 s 个结点标记为 2 并且入队 q}
[USACO09NOV] Lights
G
题目描述
给出一张 个点 条边的无向图,每个点的初始状态都为
。
你可以操作任意一个点,操作结束后该点以及所有与该点相邻的点的状态都会改变,由
变成 或由 变成 。
你需要求出最少的操作次数,使得在所有操作完成之后所有 个点的 ...