贪心算法贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。而局部交叉型贪心是其中的一类体型(名字我自己取的
局部交叉型贪心题中常常是从顺序角度入手,例如有多个部分,不同的顺序对待这些部分会有不同的效果,而贪心就是得到最符合要求的效果的顺序。假设一道题有 A - B - C - D - E 五个部分,而最终的贪心顺序假如是 E - D - C - B - A 此时如果发现任意相邻两者的交换,对前面和后面都没有影响,只有对交换的双方有影响,就属于这类题型,我称它为 局部交叉型
例题题目大意:n 个活动,每个活动有 需要时长 C 和 截止时长 D 两个量,同一时间只能完成一个活动,对于每个活动最后完成时,超出它的截止时长的部分,加入总扣分,问使得总扣分最少的情况是多少?分析:1.假设最优策略中 a,b 活动相邻。即。。。ab。。。。
2.发现a和b交换顺序后,对前面和后面的所有任务的完成情况没有影响,只有影响a和b自己--->“局部”
3.设ab前面所花时间为 t
4.交换ab前,a的扣分a1:(t + Ca - Da) b ...
位运算符号左移 <<右移 >>或 |与 &取反 ~异或 ^ (异或 0 不变,异或 1 取反)
位运算基础去掉最后一位 x >> 1在最后加一个 0 x << 1在最后加一个 1 (x << 1) + 1 或者 (x << 1) | 1把最后一位变成 1 x | 1把最后一位变成 0 (x | 1) - 1最后一位取反 x ^ 1把右数第 k 位变成 1 x | (1 << (k - 1))把右数第 k 位变成 0 x & (~ (1 << (k - 1)))右数第 k 位取反 x ^ (1 << (k - 1))
位运算妙用(实例)当题目出现需要枚举 数个有且仅有两个状态的东西时,可以利用二进制循环枚举题目本题大意:输入一个矩阵值和回合数,每个回合得到一行或者一竖的值的和,且被得到过的地方值变为 0,问得到的最大总值是多少?
分析本题考查贪心,枚举发现每次不同的选择,会对之后的贪心选择造成影响(因为被选值变成 0)这样子问题会十分复杂。发现选择的顺序对总值没有影 ...
7271a97092124f7a685ae3e068a958fe2c4d501b507604e68bbdd90467e3b50e03e4909e2dfebca1643eb455b2154134dd36a8a622362b67b29ca8d7f08afce11b60b927e47e15050bdf4da50a38840401b5981927b60da8dd7601644def6155d466a30b72e12dda0d305716313c042dd1fd626811421cdda01f1f72625ce3a0f9f1424e4357910d1f7654b173874656ab3b0b408d260e219f3d94f463c2529110350f3f7abbad18a18046c2c3bd7c5db0d88a915352793a260711d02d0a5160ef6ff22b52f0bb12634cfcea6ebe2e1386f5dbd477b21902143a28b249e810e9805ceea0adbcf5d471cb46eb4091e7e97c363887a488c6cc8 ...
如果你是解决的软件是 知到智慧树 或者 mooc 请移步另外一篇博文 “智慧树军事课脚本”前言临近期末,你是否在为网课进度,线上练习而烦恼,什么清华社,学习通等等软件,无一不是大学生的噩梦,当然,也许你可能会发现一种较好抵抗噩梦的法子,代做!可是花钱不说,还要将信息透露给一个陌生人,还可能是诈骗。。。毕竟这样的案例实在是太多了,最后也只能吃哑巴亏。
那你是否思考过为什么会有“代做”,这些人怎么有那么多时间去同时给许多人完成任务呢?他们有什么特殊的工具吗?答案是肯定的,这也能解释为什么能低成本干看似相当复杂的活。
这篇文章也触摸到这些代做的利益,但随着互联网深入大众,大家知道是必然的。再者说,这些脚本的作者大多是本着开源发布在互联网上,却被有心人找到“商机”,在这里我不好评价,只是在我看来,大学的大多数线上任务的效果于它对应的时间成本是不匹配的,甚至有些可以说是再浪费时间!然后我想把这些牛人的工程分享更多人知道,让更多人去更好分配自己的时间。
首先给出一个脚本大全网址 ScriptCat - 分享你的用户脚本 在里面可以搜索各个软件所对应的脚本!接下来我以清华社脚本为例,记录全流程展示。 ...
前言大一上学期刚刚开始学习算法,第一课就是模拟,模拟的第一题就是高精度加法,随后又有乘法,减法,除法。刚开始手搓起来相当难受,没有总结,每一道新题的高精度算法都像是在第一次写,费时间不说,还常常出错,现在刚好找个时间在此总结一下。
高精度算法:由于 c 语言或者 c++中,给定的数据范围有限,在一些对于较大数据的计算时候,无法直接由数据进行加减乘除运算去得到最后正确的答案,所有就需要借助字符串模拟大数据的算术式,模拟计算过程得到答案,这就是所谓的高精度加减乘除算法。(语言不好理解,往下看!)
加法前言对于加法,在一些 c++可以处理的数据内,进行加法运算相当简单(下面代码用 c++演示,与 c 语言语法基本一致,只学过 c 语言也能看懂)
123int a = 100, b = 100;int c = a + b;printf("%d", c);
这样子显然没问题,因为数据很小,语言处理得过来,但是!我们知道 int 类型最大值为 2147483647,而 long long 类型最大值为 9223372036854775807,当变量的值超过了最大值,就会出现 ...

