摘要:
头文件:string(无.h!)string类的构造函数与析构函数:1、string s;2、string s(str);// copy str to s;3.string s(str, strhead);//copy str to s from the strhead position4.string s(str,strhead,strtail);//copy str to s from strhead to strtail5.string s(cstr);//copy a c string to s;6.string s(char*, char*len);//copy a c string 阅读全文
随笔分类 - 基础基础基础
动态规划模型3,数塔问题
2013-02-22 09:09 by Dr.Ray, 267 阅读, 收藏,
摘要:
掌握了三要素方法这道题还是比较容易的。 这道题有一点让我比较混乱,就是正推还是倒推的问题,因为没有特殊限制,所以这道题正推倒推都可以得到正确解,无非是把塔给倒转一下,路径上的最大值还是不变的。但是,如果用正推,在推边缘上的项的状态时,就要多出一个判断上面的项是否在塔中的步骤,而倒推的话是从下面的项推上面的项,无此担忧。最后输出顶点的状态就是答案了。 另外要注意的是在初始化最底层状态时我利用了最底层的下一层的0,在其他题目中这可能会使错误的, 注意验证代码:#include<stdio.h> #include<stdlib.h> #include<string.h& 阅读全文
随机数发生器
2013-02-20 18:28 by Dr.Ray, 253 阅读, 收藏,
摘要:
#include<stdio.h>#include<stdlib.h>//rand(),srand(),RAND_MAX#include<time.h>//time(NULL)double random()//生成0-1的随机数{return (double)rand()/RAND_MAX;}int random1(int m)//生成0-m的随机数{return (int ) (random()*m + 0.5);}int main(){srand(time(NULL));//初始化随机数种子。time(NULL)返回从1970年1月1日0点以来经过的秒数 阅读全文
动态规划01背包2
2013-02-18 17:07 by Dr.Ray, 181 阅读, 收藏,
摘要:
例题8: 给定最大时间,要求采药总价值最大。 输入:第一行两个数据,time给定时间,n药材种类数,之后n行,t[i]采这株药的时间,w[i]这株药的价值。输出:可采的最大总价值。例题9: 给定最大金额,要求sum:v[i]*w[i];最大输入: 第一行:N最大金额,m物品数量,后M行:v[i],w[i] 输出:最大的sum 这类题和经典背包问题差不多,关键在于opt此时不仅是判断能否装满背包的状态,还是储存当前的总价值或者sum 的状态。 要注意金额或者时间是会重复的,于是opt要储存当前最大的总价值或者sum。 下面以例题8为例 一开始我想再用另一个数组tot储存总价值,opt仅仅用来判定 阅读全文
动态规划模型2,01背包问题
2013-02-17 14:20 by Dr.Ray, 361 阅读, 收藏,
摘要:
01背包问题: 有n个物品,每个体积为v[1-n],问这些物品能否装满体积为b的背包,物品不能切分,形状因素忽略不计。求背包最小剩余空间。阶段:以v数组的下标划分状态:opt[]为0或1状态转移方程:opt[j] = opt[j - v[i]]思路: opt[b+1]代表体积为0~b的背包能否被装满,0否1能; 于是就要知道所有物品体积组合之和。 我理所因当想到用循环,多层循环强行组合不可能,因为循环层数不确定。 可以用两层循环如//key!,先记一个物品v1体积的opt[v1]=1,接着只要体积v2于之前出现过的体积v1加上另一个物品的体积则opt[v2]=1。 注意第二层必须用倒推,否则 阅读全文
递归经验
2013-02-04 20:58 by Dr.Ray, 141 阅读, 收藏,
摘要:
首先判断递归是否停止,然后判断不同情况下进行的递归,如power函数double power(int x,int n){ if(n == 1)return x;//判断是否停止递归;else if(n%2 == 0)return power(x,n/2)*power(x,n/2); else if(n%2 == 1) return power(x,(n-1)/2)*power(x,(n-1)/2)*x;} 阅读全文
strcmp函数
2013-02-01 11:05 by Dr.Ray, 188 阅读, 收藏,
摘要:
strcmp(const char *a,const char *b)比较a,b字符串的大小。从首位开始,相同则比价下一位,出现不同则返回此位之差。比如:a="abcde";b="abcdf";strcmp(a,b)==-1;a.b中存在未赋值的区域没关系。如果赋值区域子母都相同,而赋值区域长度不同,则返回两字符串长度之差,比如:a="qqq";b="qqqw";strcmp(a,b)==-1; 阅读全文
栈
2013-02-01 10:18 by Dr.Ray, 169 阅读, 收藏,
摘要:
比较简单#include<stdio.h> #include<stdlib.h> #define max 5 struct stack { int head,tail; int *num; };void inistack(stack * p) { p->num=(int *)malloc(6*sizeof(int)); p->head=0; p->tail=-1; }void push(stack * p,int a) { if(p->tail==max) { printf("stack overflow\n"); retur 阅读全文
队列
2013-02-01 09:43 by Dr.Ray, 208 阅读, 收藏,
摘要:
经验总结:1、队列必须用结构体指针,否则调用函数时也是传值调用,无法改变结构体变量的值。2、队列中的数组用指针表示较好。3、在写printqueue函数时,我的码会导致当i=max,i=0,后无法让i=0与p->tail判断是否相等,导致死循环。以后注意在多重选择结构语句时验证是否每一个值都会被相应的判断语句验证一遍下面是代码。已经过编译验证为正确#include<stdio.h> #include<stdlib.h> #define max 5struct queue { int head,tail; int *num; };void iniqueue(queu 阅读全文
浙公网安备 33010602011771号