
C++
文章平均质量分 62
枫轩缘
这个作者很懒,什么都没留下…
展开
-
整数划分问题(递归&非递归)
递归算法:将正整数n表示成一系列正整数之和,n=n1+n2+...+nk,其中n1>=n2>=n3>=...>=nk>=1,k>=1。正整数n的这种表示称为正整数n的划分。正整数n的不同的划分个数城外正整数n的划分数,记作p(n)。例如,正整数6有如下11种不同的划分,所以p(6)=11。6;5+1;4+2;4+1+1;3+3;3+2+1;3+1+1+1;2+2+2原创 2012-11-05 17:19:39 · 2995 阅读 · 0 评论 -
最长公共上升子序列(LCIS)的O(n^2)算法
写得非常好的一篇文章,来自:http://wenku.baidu.com/view/3e78f223aaea998fcc220ea0.html另外杭电上的hdu 1423 考的就是这个.Greatest Common Increasing Subsequence http://acm.hdu.edu.cn/showproblem.php?pid=1423预备知识:动态规原创 2013-05-03 20:41:07 · 1204 阅读 · 1 评论 -
VS2012警告未能加载包“Visual C++ package”
安装了windows更新后就出现VS2012无法打开项目的问题,还报各种加载失败。解决方法:到微软官网下载VS2012更新 KB2781514链接地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=36020微软官网说明:Visual Studio 的缺陷可能导致它在 .NET 4.5 frame原创 2013-08-27 15:22:04 · 15285 阅读 · 4 评论 -
C++中基于形参是否为引用的重载(奇怪的重载)
无意间发现,根据形参是否为引用的不同,也可以实现重载,但是调用时会出问题.比如下面的代码原创 2014-04-05 17:13:51 · 3377 阅读 · 2 评论 -
STL之vector
vector的存储空间是一段连续内存,支持随机存取.vector两个容易混淆的方法capacity和size,前者表示容器总共能够存放的元素的容量,后者表示当前已经存储的元素个数(有效元素个数).vector能自动动态增长.当vector中元素放满后(即capacity等于size时),它会以原大小两倍配置另一块空间,然后把原先内存拷贝到新的空间,并释放原空间.因此在向vector中加入元原创 2014-04-18 22:13:21 · 845 阅读 · 0 评论 -
二路归并排序算法(递归&非递归)
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的,然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合原创 2012-11-09 14:31:34 · 29754 阅读 · 6 评论 -
C++中struct和class关键字的三个区别
C++中struct和class关键字的三个区别1.成员的默认访问权限不同.struct默认是public而class默认是private.2.默认的继承保护级别不同.struct默认是public继承而class默认是private继承.3.class可用作定义模板参数的关键字,类似typename,而struct不行.原创 2014-09-02 13:48:16 · 2115 阅读 · 0 评论 -
输出全排列(递归&非递归)
递归算法:假设总共有n个元素,其核心是:将每个元素放到余下n-1个元素组成的队列最前方,然后对剩余元素进行全排列,依次递归下去。比如:1 2 3首先将1放到最前方(跟第1个元素交换),然后排列余下的2 3,然后将1放回本来位置 结果 1 2 3;1 3 2 其次将2放到最前方(跟第1个元素交换),然后排列余下的1 3,然后将2放回原处结果 2 1 3; 2 3 1原创 2012-11-04 22:59:56 · 17919 阅读 · 5 评论 -
C++ Primer笔记 第1章 快速入门
1.main函数返回0值表明程序成功执行完毕,main函数是唯一被操作系统显式调用的函数。2.访问main函数的返回值方式:Unix下使用echo $? ,Windows下使用echo %ERRORLEVEL%。3.标准库定义了4个IO对象,1个输入流类型:cin(标准输入),3个输出流类型:cout(标准输出)、cerr(标准错误)、clog。4.头文件没和#include原创 2013-03-10 14:26:04 · 919 阅读 · 0 评论 -
约瑟夫环的O(n)算法
问题描述:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列,求最后一个出列人的编号。为了讨论方便,先把问题稍微改变一下,并不影响原意:问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求最后原创 2013-05-06 21:33:11 · 1096 阅读 · 0 评论 -
平衡负载
一、赛题回顾:Du熊正在负责一个大型的项目,目前有K台服务器,有N个任务需要用这K台服务器来完成,所以要把这些任务分成K个部分来完成,在同上台服务器上执行的任务必须是连续的任务,每个任务有各自需要的执行时间。例如N=5,K=2,每个任务需要时间分别为5,3,1,4,7分钟,那么我们可以分成(5)(3 1 4 7)两部分,这样第一台服务器所花时间就是5分钟,而第二台机器需要花15分钟原创 2013-05-05 16:06:27 · 858 阅读 · 0 评论 -
0-1背包问题(动态规划)
一 问题描述: 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。 所谓01背包,表示每一个物品只有一个,要么装入,要么不装入。二 解决方案: 考虑使用动态规划求解,定义一个递归式 opt[i][v] 表示前i个物品,在背包容量大小为v的情况下,最大的装载量。 opt[i][v] =原创 2012-11-15 20:51:33 · 786 阅读 · 0 评论 -
C++经典书籍(转载)
转自 http://hi.baidu.com/heike764520/item/241d6da0e5ed5a228919d3bbc++程序设计教程 c++编程思想 c++大学教程 c++程序设计语言 数据结构算法与应用c++语言描述 c++标准模板库------自修教程与参考手册 泛型编程与STL 深度探索c++对象模型 设计模式---可复用面向对象软件的基础原创 2012-10-30 16:23:22 · 1666 阅读 · 0 评论 -
汉诺塔问题(递归)
经典的递归问题:三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。#includeusing namespace std;/** a上的圆盘移动到b上,通过c来辅助 * n表示圆盘的数量 */ int Hanoi(int n,char a,char b原创 2012-11-05 19:33:49 · 1592 阅读 · 0 评论 -
矩阵连乘问题(动态规划)
计算三个矩阵连乘{A1,A2,A3},维数分别为10*100 , 100*5 , 5*50按此顺序计算需要的次数((A1*A2)*A3):10X100X5+10X5X50=7500次按此顺序计算需要的次数(A1*(A2*A3)):10X5X50+10X100X50=75000次所以问题是:如何确定运算顺序,可以使计算量达到最小化。枚举显然不可,如果枚举的话,相当于一个“完全加括号问题”原创 2012-11-10 22:05:03 · 1441 阅读 · 0 评论 -
关于string类型的字符串是否以\0结尾
今天在带大一学生C++上机时,涉及到一个string类型的字符串是否以\0结尾的问题,本来我很坚定string类型结尾并没有\0,C风格的字符数组才会那样。但是程序运行结果却说明string类型的字符串后面确实有\0。于是回实验室后自己又实验了下,才发现这和编译器有关,真坑爹。对于如下一段测试程序,在C-free 5.0和g++ 4.1上输出yes,而在VS2010上执行时报错!原创 2012-12-19 22:06:41 · 30385 阅读 · 6 评论 -
new一个对象的时候加括号和不加括号
CBase *base = new CDerived();CBase *base = new CDeviced;对于自定义类型,调用的都是无参构造函数,没区别的。只不过对于内建类型不太一样,加了扩号会做默认值初值化比如(在VS 2010上验证):int* p = new int;//p指向的int值是不确定的;int* q = new int();//q指向的int原创 2012-12-22 13:36:57 · 2021 阅读 · 0 评论 -
二分查找算法
二分查找算法前提有2个:1.必须采用顺序存储结构,2.必须按关键字有序排列。时间复杂度为O(logn)。 算法主要思想:将n个元素分成两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果xa[n/2],则我们只要在数组a的右半部继续搜索x。如果考虑到时间效率,代码中最好是将相等的情况放在最后一个判断中,因为相等的概率比大于和小于的概率要小很多,原创 2013-03-01 21:44:53 · 876 阅读 · 0 评论 -
图的邻接表表示
图的邻接表表示法类似于树的孩子链表表示法。对于图G中的每个顶点vi,该方法把所有邻接于vi的顶点vj链成一个带头结点的单链表,这个单链表就称为顶点vi的邻接表(Adjacency List)。1. 邻接表的结点结构(1)表结点结构 ┌────┬───┐ │adjvex │next │ └────┴───┘ 邻接表中每个表结点均有两个域原创 2013-03-13 15:17:39 · 2848 阅读 · 0 评论 -
快速排序算法
快速排序(QuickSort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。快速排序采用了基于分治的策略。主要思想:在数组中选取一个枢轴(或称主元,最基本的就是选第一个元素),把小于主元的元素全部放在左边,大于主元的全部放右边(以上即为partition函数),然后再按此方法对主元左边和主元右边的两部分数据(不包含主元!)分别进行快速排序,整个排序过程可以递归进行,以原创 2013-04-03 22:55:59 · 867 阅读 · 0 评论 -
C++ Primer笔记 第2章 变量和基本类型
1.算术类型的存储空间依机器而定,C++标准规定了每个算术类型的最小存储空间,但它并不阻止编译器使用更大的存储空间。2.一般地,short类型为半个机器字长,int类型为一个机器字长,而long类型为一个或两个机器字长(32位机器中int类型和long类型通常字长是相同的)。3.C++中,把负值赋给unsigned对象是完全合法的,其结果是该负数对该类型的取值个数求模后的值。4.字面值原创 2013-03-12 19:18:39 · 654 阅读 · 0 评论