随笔分类 - 算法与数据结构
摘要:题目地址:herepat 2-05求集合数据的均方差没什么可说的,大水题 1 #include 2 #include 3 int main() 4 { 5 int n; 6 scanf("%d", &n); 7 int data[n]; 8 double average = 0.0; 9 for(int i = 0; i 2 #include 3 using namespace std; 4 5 int main() 6 { 7 int num,times; 8 scanf("%d%d", &num, ×); 9 i..
阅读全文
摘要:洗牌可以抽象为:给定一组排列,输出该排列的一个随机组合,本文代码中均以字符数组代表该排列算法1-算法3 都是在原序列的基础上进行交换,算法空间复杂度为O(1)算法1(错误):随机交换序列中的两张牌,交换n次(n为序列的长度),代码如下: 1 void Shuffle_randomSwap(char *arr, const int len) 2 { 3 for(int i = 1; i = 0; i--) 4 { 5 int a = rand()%len; 6 int temp = arr[i]; 7 arr[i] = arr[a]...
阅读全文
摘要:咋一看,这是个很简单的问题,但是如果n是个不确定的数呢?比如服务器每天会收到数以亿计的请求,但是目前服务器端不希望保存所有的请求,只想随机保存这些请求中的m个。试设计一种算法,能够使服务器实时保存m个请求,并使这些请求是从所有请求中的大致等概率被选中的结果。注意:不到一天的结束,是不能提前知道当天所有请求数n是多少的。下面我们分两种情况讨论(1)n已知,(2)n未知。1 n已知可以将问题简化为:从集合A(a_1, a_2, … ,a_n),中随机选取m(0≤m≤n)个元素,使得每个数被选取的概率相等。可以很简单的计算每个数被选取的概率是m/n。如果集合A里面的元素本来就具有随机性, 每个元素在
阅读全文
摘要:问题描述:这是前缀翻转排序问题,书上的内容这里不详述,给个电子版下载地址本文源码编译环境:codeblock with gcc书上给的源码有点小错误,编译通不过,这里是修改过后的原始代码: 1 /****************************************************************/ 2 // 3 // 烙饼排序实现 4 // 5 /****************************************************************/ 6 #include 7 #include 8 class CPrefi...
阅读全文
摘要:【目录】不考虑其他进程,cpu画正弦曲线获取总体cpu利用率获取多核处理器单个cpu利用率考虑其他进程,cpu画正弦曲线下面的程序针对多核处理器,可以设置让任何一个cpu显示相应的曲线(本文以正弦曲线为例)代码编译环境:windows 7 64位 酷睿 i5 处理器,vs2010.可以修改CpuSin函数的计算 busySpan 和 idleSpan的部分以显示不同的曲线。下面的代码没有考虑cpu中其他进程的占用情况,这种情况详见第二部分 1 #include 2 #include 3 #include 4 5 //把一条正弦曲线0~2pi 之间的弧度等分200份抽样,计算每个点的振幅...
阅读全文
摘要:tianyi cui 的背包九讲老版本:http://love-oriented.com/pack/,更新后的版本PDF下载:http://cuitianyi.com/blog/%E3%80%8A%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98%E4%B9%9D%E8%AE%B2%E3%80%8B2-0-alpha1/新版pdf下载地址2:http://download.csdn.net/detail/tangzhangpeng/5591321本文实现了新版本第一章 “01背包问题”,代码中的注释也是针对新版本。pdf 1.5 小节中的小错误,常数优化应该是,对Ci求和
阅读全文
摘要:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1561很明显这是个分组的有依赖的背包问题(背包问题的扩展请参考Tianyi Cui 的背包九讲http://love-oriented.com/pack/)。构建树:若攻击城堡 a 要先攻击城堡 b,则 a 是 b 的儿子,这样构建以后是一个森林,添加一个宝物数量为0的节点作为整个森林的树根以后就是一颗树了。递推方程:设dp[a][b] 表示以 a 为根节点的子树,要攻击 b 个城堡所获得的最大金钱数目。其中 a 城堡是已经攻下来的。 则 dp[a][b] = max( dp[a][b]...
阅读全文
摘要:用c++实现了md5算法。包含 md5.h 和md5.cpp 两个文件。主要参考百度百科 “MD5” 原理的描述:http://baike.baidu.cn/view/7636.htm,代码中变量命名也是参考其中的公式,程序的使用说明在md5.h 文件的末尾注释中。测试结果和百度百科测试例子一致。实现过程中需要注意事项:最后把四个变量A B C D 链接成结果时 ,注意变量高低位的先后顺序,具体参考 LinkResult()方法。md5.h 1 #ifndef _MD5_H_ 2 #define _MD5_H_ 3 4 #include 5 #include 6 using namesp...
阅读全文
摘要:题目地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1025如果我们定义在一个sticks序列中,对所有的 j>i 均满足 : sticks[i].l>=sticks[j].l 且sticks[i].w>=sticks[j].w ,则称这个序列为一个 “簇”。本题就是求把所有的元素分为最少的簇数。假设输入为A,首先把A排序(按 l 的增序,若两个元素的 l 相同,则按 w 的增序),排序后的序列称为B,对序列B按照元素的属性 w 求最长递减子序列的长度(严格递减),记为len。则我们要求得最少簇数
阅读全文
摘要:问题描述:给定某一组无序的数,求其中最长的单调序列的长度(该单调序列不一定是连续的),如在 5 6 1 2 4 7 5 中最长上升增序列是1 2 4 7 或者1 2 4 5。该题可以用动态规划的方法解决,时间复杂度为O(n^2):设A[t]表示序列中的第t个数,F[t]表示从1到t这一段中以t结尾的...
阅读全文
摘要:题目地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1074这道题的dP是基于 “最大子段和” 的dp方法例如求数组 1 2 -3 4;-5 6 -1 8 的最大子矩阵和,可以把两行相加得到数组-4 8 -4 12,对这个数组求最大子段和为8+-4+12=16,所以矩阵对应的最大子矩阵为2 -3 4;6 -1 8那么可以利用以上思想,对于m*n的矩阵A,选取他的第 i 行到第 j 行的数据组成子矩阵Aij (j-i+1行n列),Aij 对应的最大子段和可以如下求得:对每一列的值进行累加得到一个一维数组(1*n),对
阅读全文
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1027设f[i][j]为基因1的前 i 个核苷酸与基因2的前 j 个核苷酸匹配所得的最高分数。则 f[i][j]= max { f[i-1][j-1]+ score[i][j], //基因1的前 i-1 个核苷酸与基因2的前 j-1 个核苷酸匹配,score[i][j]为核苷酸 i 与核苷酸 j 匹配的得分 f[i-1][j] + score[i][], //基因1的前 i-1 个核苷酸与基因2的...
阅读全文
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1013采用动态规划解决。设f[n][x][y] 表示前n辆车装了x个装备1和y个装备2之后能装的最多的装备3的个数。递推关系如下:f[n][x][y] = max ( f[n - 1][x - a][y - b] + c); 其中f[0][x][y]=0其中a和b的范围为第n辆车可以装的装备1和装备2的个数, c 为第n辆车装完a个装备1和b个装备2后可以装的装备3的个数。通过递推求得f[n][x][y]后,可以遍历x和y(x,y的范围可以在上述递推的过程中得.
阅读全文