大一寒假题单
body {
background-color: #121212; /* 设置背景为深色 */
color: #f1f1f1; /* 设置文字颜色为浅色,以便在黑色背景上更清晰 */
font-family: Arial, sans-serif;
}
table {
width: 100%;
border-collapse: collapse;
margin: 20px 0;
font-family: Arial, sans-serif;
}
th, td {
border: 1px solid #444; /* 改为深色边框,和背景更加契合 */
padding: 8px;
text-align: left;
...
贪心算法贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。而局部交叉型贪心是其中的一类体型(名字我自己取的
局部交叉型贪心题中常常是从顺序角度入手,例如有多个部分,不同的顺序对待这些部分会有不同的效果,而贪心就是得到最符合要求的效果的顺序。假设一道题有 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)这样子问题会十分复杂。发现选择的顺序对总值没有影 ...
我大一上学期的经历大一入学前的暑假志愿录取后,双非一本计算机专业,随后加到院校的新生群,些许社团学长学姐在新生群活跃,虽然我不是特别喜欢水群,但也不想漏掉大学第一波信息差,也一直关注新生群的消息,几天下来,我对两个社团感兴趣,一个是信息学院的 robotmaster 崇实战队,一个是计算机学院的 ACM 协会,在听从大部分学长学姐的建议后,我就开始了自学 c 语言,初出茅庐,带着惯性思维和个人偏见,当时的自己还是更喜欢类似嵌入式方向一些,但自己的专业是计算机,当然也得花功夫在了解自己专业上,又潜水一段时间,知道了学习 c 语言的同时,可以拿学校 oj 练手。与此同时,在崇实战队的招生群中,了解了电控的学习大纲,于是一个月的 c 语言学习以及刷题,我大致入门了,电控组的学长建议开始学习 51 单片机,并且这位素未谋面的学长竟然直接送我一套 51 单片机,并耐心的教导我如何去自主学习入门 51。
这时候离开学也就剩下一周多我也给自己放了小假,找姐姐游玩了好久,这段时间 51 进度基本没什么推进,上了几节课而已,也许是 ACM 新生群更加活跃些,我似乎更愿意投入时间在这里,虽然也很放松随意的 ...
算法笔记
未读前言大一上学期刚刚开始学习算法,第一课就是模拟,模拟的第一题就是高精度加法,随后又有乘法,减法,除法。刚开始手搓起来相当难受,没有总结,每一道新题的高精度算法都像是在第一次写,费时间不说,还常常出错,现在刚好找个时间在此总结一下。
高精度算法:由于 c 语言或者 c++中,给定的数据范围有限,在一些对于较大数据的计算时候,无法直接由数据进行加减乘除运算去得到最后正确的答案,所有就需要借助字符串模拟大数据的算术式,模拟计算过程得到答案,这就是所谓的高精度加减乘除算法。(语言不好理解,往下看!)
加法前言对于加法,在一些 c++可以处理的数据内,进行加法运算相当简单(下面代码用 c++演示,与 c 语言语法基本一致,只学过 c 语言也能看懂)
123int a = 100, b = 100;int c = a + b;printf("%d", c);
这样子显然没问题,因为数据很小,语言处理得过来,但是!我们知道 int 类型最大值为 2147483647,而 long long 类型最大值为 9223372036854775807,当变量的值超过了最大值,就会出现 ...

