摘要: 0-1背包问题:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。这个问题的特点是:每种物品只有一件,可以选择放或者不放。算法基本思想:利用动态规划思想 ,子问题为:f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。其状态转移方程是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]} //这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。解释一下上面的方程:“将前i件物品放入容量为v的背包中”这个子问题,如果只考虑第i 阅读全文
posted @ 2011-12-13 17:46 fly1988happy 阅读(42858) 评论(13) 推荐(8) 编辑
摘要: 题目:求(1)一组数字的全排列(2)一组数字中某几个数字的组合一、排列算法:全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3}为例说明如何编写全排列的递归算法。 如下图所示:上图中,第一层S1表示第一个数分别与第1、2、3个数交换位置,如123是1和第一个数1交换,213是1和第二个数2交换,321是1和第三个数交换。第二层S2是第二个数分别与第2、3个数交换位置。则最后一层的所有叶子节点,即为全排列的所有结果。第k层中的节点Sk就是父节点中的第k个数,分别与第k、k+1...n个数交换位置。递归算法代码:代码#include <stdio 阅读全文
posted @ 2011-12-13 11:27 fly1988happy 阅读(1689) 评论(0) 推荐(0) 编辑
摘要: 在VC++6.0中的单步调试:调试重要的几个键:F9在当前光标所在的行下断点,如果当前行已经有断点,则取消断点.F5调试状态运行程序,程序执行到有断点的地方会停下来.F10执行下一句话(不进入函数)step outF11执行(进入函数)step inCTRL+F10运行到光标所在行.F11和F10的区别是,如果当前执行语句是函数调用,则会进入函数里面.(问题:按f11调试时出现please enter the path for scanf.c(或printf.c等)?说明在调试到某个用到了scanf的语句时,用了F11而不是F10。F11会逐条语句调试,F10会跳过当前行,而不管这条语句是一个 阅读全文
posted @ 2011-12-09 17:12 fly1988happy 阅读(11395) 评论(0) 推荐(0) 编辑
摘要: 1.假设已经有mysql-5.5.10.tar.gz以及cmake-2.8.4.tar.gz两个源文件(1)先安装cmake(mysql5.5以后是通过cmake来编译的)[root@ rhel5 local]#tar -zxv -f cmake-2.8.4.tar.gz[root@ rhel5 local]#cd cmake-2.8.4[root@ rhel5 cmake-2.8.4]#./configure[root@ rhel5 cmake-2.8.4]#make[root@ rhel5 cmake-2.8.4]#make install(2)创建mysql的安装目录及数据库存放目录[r 阅读全文
posted @ 2011-11-21 21:38 fly1988happy 阅读(91721) 评论(5) 推荐(13) 编辑
摘要: 方法二:View Code #include<stdio.h> #define BYTE unsigned char int main(void) { BYTE i = 81; while(i--) { if((i / 9) % 3 == (i % 9) % 3) continue; printf("A = %d, B = %d\n", i /9 + 1, i%9 + 1); } return 0; }“将”和“帅”各在自己的3*3的格子间里面走动,我们共需要验证9*9=81种位置关系,这也是i=81的由来。此外我们要明白 i/9和i%9的含义。我们知道,整数i 阅读全文
posted @ 2011-11-20 21:13 fly1988happy 阅读(1062) 评论(0) 推荐(0) 编辑
摘要: 程序变量分区中栈和堆的区别(1)申请方式stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间。heap: 需要程序员自己申请,并指明大小,在C中malloc函数,C++中是new运算符。如p1 = (char *)malloc(10); p1 = new char[10];如p2 = (char *)malloc(10); p2 = new char[20];但是注意p1、p2本身是在栈中的。(2)申请后系统的响应栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。堆:首先应该知道操作系统有一个记录空闲内存地址的 阅读全文
posted @ 2011-11-17 21:26 fly1988happy 阅读(434) 评论(0) 推荐(0) 编辑
摘要: 1、C++编译的程序占用的内存分类(1)栈区(stack):程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。(2)堆区(heap) :在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。(3)全局静态区(static):编译器编译时即分配内存。全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。(4)文字常量区 :常量字符 阅读全文
posted @ 2011-11-17 21:17 fly1988happy 阅读(585) 评论(0) 推荐(0) 编辑
摘要: C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。但二者有着本质的区别:数组:要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针:可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。下面以字符串为例比较指针与数组的特性:1.修改内容实例1代码中,字符数组a的容量是6个字符,其内容为hello。a的内容可以改变,如a[0]= ‘X’。指针p指向常量字符串“world”(位于静态存储区,内容为wo 阅读全文
posted @ 2011-11-17 10:21 fly1988happy 阅读(2035) 评论(0) 推荐(0) 编辑