自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

翻译 HDU acm step:Chapter one section three(简单贪心)

这次的题目除了第四题和最后一题,都是贪心题。1.3.1 Moving Tables策略:将处于对面的当作是同一个位置,每次占用在相应的位置加一,全部数完之后求出最大的占用的那个值,就是最大的时间了。开始出现的错误是没有分开求占用。1.3.2 今年暑假不AC策略:先拍结束时间,从小到大排序。在比较开始时间与上一次的结束时间。大于的表示可以。1.3.

2016-01-26 19:52:57 441

原创 HDU acm step:Chapter one section two

Box of BricksTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9216 Accepted Submission(s): 2157 Problem DescriptionLit

2016-01-26 18:45:53 607

原创 线性时间排序:计数排序

算法描述:找出每一个数值在改数组中有多少个值比它小,那么就可以把这个数放在第n+1位。算法实现:遍历每一个a[i],是的c[a[i]]++。然后计算每一个数前面有多少个数。在把这些书转移,一共会用到三个数组。时间复杂度:O(n+k),k为数据的个数。比较适用于数据量大,且比较密集的情况。代码如下:#include using namespace std;int main

2016-01-11 22:17:11 254

原创 快速排序(随机化版本)

算法描述:每次选择一个值,将比它小的值放在它的左边,比它大的值放在它的右边。不断递归调用即可。时间复杂度:平均复杂度O(nlgn),最大复杂度为O(n2),最小复杂度为O(n)。有序程度越高,复杂度越大。最高时是每次换位都是全部分到同一边。但快速排序的稳定性比较强, 大部分都是接近于平均情况。如果每次取得值选择的是随机值,那么就稳定在平均复杂度了。代码如下(随机化版本)#include

2016-01-11 21:25:07 503

原创 归并排序

算法分析:归并排序使用的是分治的思想,分、治、和。不断把数组二分,知道每一个小数组只有一个元素,然后在逐层合并。时间复杂度:O(nlgn)#include using namespace std;void merge1(int a[], int b[], int p, int r, int q){ int i = p, j = r+1, k = p; while

2016-01-11 19:03:29 365

原创 插入排序

算法描述:从第二个值开始向左查找,找到适合的位置插入。实现过程是:如果找到比它本身大的交换,如果找到比它小的,插在该值的后面。时间复杂度:平均时间复杂度为O(n2),输入的数据越有序,速度越快。最快可以达到线性时间O(n)。代码如下:#include using namespace std;void InsertionSort(int a[], int n){ fo

2016-01-11 19:02:23 258

原创 选择排序

算法描述:从小到大排序:选择第二个到最后中最小的,将它与第一个交换,再选择第三个到最后的最小的,将它与第二个交换,以此类推。时间复杂度:两重循环,时间复杂度是O(n2),较为繁琐。代码如下:#include using namespace std;void SelectSort(int a[], int n){ for(int i = 0; i < n; i++)

2016-01-11 18:28:12 214

原创 冒泡排序

算法描述:排序的过程和排序的名字相同,这里描述的是排序从小到大的过程。每次都从第一个数开始遍历,将这个数和后面一个数对比,如果这个数的大于后面一个数,那么就把这两个数交换,如果这个数小于后面一个数,那么就拿后面一个数和后面一个数的后一个数比较,第一轮遍历过后,最后一个数就是最大的一个数了。然后第二轮遍历的次数减少一。以此类推。时间复杂度:两次循环,时间复杂度O(n2),效率比较低。

2016-01-11 17:57:43 278

原创 深度优先搜索(POJ1164 城堡问题)

深度优先搜索:具体做法就是沿着某条路走到尽头,如果没路了,就退回上一步,在寻找其他路线,如果再没路,继续退回上一路线,直到最开始。从而达到遍历的目的。例题:POJ1164The CastleTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 6936 Accepted: 38

2015-12-16 20:04:33 509

原创 最优编码问题(哈夫曼编码)(贪心)

问题描述:给出n个字符的频率ci,给每个字符赋予一个01编码串,使得任意一个字符的编码不是另一个字符编码的前缀,而且编码后总长度(每个字符的频率与编码长度乘积的总和)尽量小。分析:此处策略为设置变长编码,给低频的编码设置较长,高频的编码设置较短。任何一个前缀编码都可以表示为每个非叶节点恰好有两个子结点的完全二叉树。左结点为1,右结点为0。叶节点就代表编码,那么最深处的叶节点的频率应该是

2015-12-16 01:39:33 4106

原创 区间覆盖问题(贪心)

问题描述:数轴上有n个闭区间[ai, bi], 选择尽量少的区间覆盖一条指定线段[s,t]。分析:突破口还是区间包含和排序扫描,但是可以先把每个区间在大区间以外的部分去掉,同时相互包含的情况下,此处是考虑大区间。各区间按照ai从小到达排序,如果区间1的起点不是s,那么无解。把在s之前的部分切掉,选择以s为起点的最大区间,以该区间的末尾为s,如此反复,知道最后一次替换后的s大于t为止。代码过

2015-12-16 00:53:24 451 1

原创 区间选点问题(贪心)

问题描述:数轴上有n个闭区间[ai, bi]。取尽量少的点,使得每个区间内都至少含有一个点(不同区间内含的点可以是同一个)分析:区间包含,小区间满足则大区间也一定满足,步骤和选择不相交区间相似,先对bi进行非上升排序,如果bi相等则保持ai从大到小排序(大区间包含)。从第一个区间开始,取最后一个点,因为取最后一个点可以笼罩的区域最多。然后思路同不相交区间,循环,若后一个区间的起始部分大于前一个

2015-12-16 00:02:41 869

原创 选择不相交区间(活动安排问题)(贪心)(HDU2037)

数轴上有n个开区间(ai,bi)。选择尽量多个区间,使得这些区间两两没有公共点。(这里的区间可以当作是活动的时间)分析:个人理解是每一个区间尽可能选小区间,同时使数轴利用率尽可能大。(1)先对bi进行非减序排序,b1(2)对排序后的顺序进行ai的检查,若被检查的区间的开始小于前一个采用的区间的结束部分,那么就不采用该区间。如果被检查的区间的开始大于前一个采用的区间的结束部分,那么就采用

2015-12-15 17:43:52 1059

原创 乘船问题(贪心)

问题描述:有n个人,第i个人重量为wi。每艘船的最大载重量为c,且最多只能乘两个人。用最少的船装载所有人。分析:先按轻重排序,考虑最轻的人,让他和最重的人组合,如果跟最重的无法组合,那么重量往下减,知道可以组合。若所有人都不可以那么所有人都单船。如果有人可以,那么从第二轻的人开始,同时组合是刚刚组合到较重的人编号往下,如此递推即可。题目有点难找,这种时候还是自己脑补吧!T组数据,max

2015-12-15 16:59:04 4381 1

原创 部分背包问题(贪心) HDU1009

问题描述:有n个物体,第i个物体的重量为wi,价值为vi。在总重量不超过c的情况下让总价值尽量高。每一个物体都可以只取走一部分,价值和重量按比例计算。分析:要综合考虑价格和重量,所以应该从性价比最高的开始拿,就是单位重量价格最高的,知道刚好到达C为止。例题:hdu1009FatMouse' TradeTime Limit: 2000/1000 MS (Java/Others

2015-12-15 16:47:53 590

原创 最优装载问题(贪心)

问题简述:给出n个物体,第i个物体重量为wi。选择尽量多的物体,是的总重量不超过C。分析:最简单的一种了,排序,依次选择每一个物体,直到无法装下为止。附代码如下:#include using namespace std;int a[10010];int main(){ int n, sum = 0, maxn, k = 0; while(cin >> n

2015-12-15 16:11:13 760

原创 高精度算法(超出范围的数值的计算)

高精度算法的实现步骤如下:读入,将数据储存到数组中,进行加减乘除的计算。储存数据时注意的问题:判断位数,由于这里是储存到字符串里面,故而数组的第一位可能是负号“-”, 此处可以用ASCII码来判断是不是等于45,标记,然后再读入数据转化为下标等于位数减一。(即下标0时是个位,这个到乘法时就会发现很奇妙了)加法:(1)上步判断并去掉了负号,加法时判断是否同号,若同号直接加,加法是用循

2015-12-08 22:48:22 1487

原创 HDU 2011 多项式求和

Problem Description多项式的描述如下:1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ...现在请你求出该多项式的前n项的和。 Input输入数据由2行组成,首先是一个正整数m(m Output对于每个测试实例n,要求输出多项式前n项的和。每个测试实例的输出占一行,结果保留2位小数。 Sample Inp

2015-11-23 16:50:31 261

原创 HDU2012 素数判定

Problem Description对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39 Input输入数据有多组,每组占一行,由两个整数x,y组成,当x=0,y=0时,表示输入结束,该行不做处理。 Output对于每个给定范围内的取值,如果表达式的值都为素数,则输出"OK",否则请输出“Sorry”,每组输出占一行。 

2015-11-23 16:47:39 297

原创 cmd命令的学习总结(3)

声明:以下出现的所有目录及文件都只会在学习过程中出现操作。进行的操作会尽可能在命令行中打出。但毕竟现在是学习, 格式与操作部分只挑选一些目前觉得有用或者目前懂得操作的,剩下的可以通过自行查找。(忽略部分检查过程,同时建立素材将不再写出)(错误之处希望指正,存疑之处希望得到解答)

2015-09-17 10:30:09 407

原创 cmd命令的学习总结(2)

声明:以下出现的所有目录及文件都只会在学习过程中出现操作。进行的操作会尽可能在命令行中打出。但毕竟现在是学习, 格式与操作部分只挑选一些目前觉得有用或者目前懂得操作的,剩下的可以通过自行查找。(忽略部分检查过程,同时建立素材将不再写出)(错误之处希望指正,存疑之处希望得到解答)7. 将至少一个文件复制到另一个位置: copy    格式: copy /**   复制的文件 + 

2015-09-16 09:05:21 434

原创 cmd命令的学习总结(1)

声明:以下出现的所有目录及文件都只会在学习过程中出现操作。同时所有操作是先在命令行中操作后打入后再输入文章中。(忽略部分检查过程)       格式与操作部分只挑选一些目前觉得有用或者目前懂得操作的。1.进入某盘    格式:直接输入名称加:   操作:d:  f:2.进入目录   格式:cd 目录名   操作:目前位于f盘。   cd 光盘

2015-09-15 10:25:58 574

原创 关于while((c = getchar()) != EOF)的使用

这个问题是昨天遇到的。首先输入字符后敲回车是可以出现输出的,同时在debug的过程中发现是一个读入的。接着是关于EOF,EOF是定义在stdio.h的一个常量,尝试打印EOF打错了几次,最后直接printf("%d", EOF);得到的结果是-1;最后,结束while循环可以直接键入control + z,再按回车键,即为结束。然后就没有然后了!

2015-09-14 17:12:50 1202

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除