自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

至少努力过

虽然今后不一定用得上,但既然已经付出过一段时间和努力,那就坚持下去,下去。。。

  • 博客(42)
  • 收藏
  • 关注

原创 近似串匹配问题

样本P和文本T为K-近似匹配包含两层含义:1、二者的差别数至多为k2、差别数是指二者在所有匹配对应方式下的最小编辑(包括删除、插入、修改)错误总数#include #include const int maxn=100;//假设字符串的长度最长为100using namespace std;char P[maxn],T[maxn];//P[]为存储模式,T[]为存储文本

2015-09-13 10:38:04 4533 1

原创 二叉查找树

二叉查找树(BinarySearch Tree,也叫二叉搜索树,或称二叉排序树Binary Sort Tree)或者是一棵空树,或者是具有下列性质的二叉树:    (1)、若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值;    (2)、若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值;    (3)、它的左、右子树也分别为二叉查找树。{CS

2015-09-12 14:22:49 256

原创 选择问题(查找第k小元素)

选择问题即:寻找N个元素中的第K个最大者或最小者。#include const int maxn=100;//假设最多有100个元素using namespace std;int data[maxn];int n;int inp(int low,int high)//划分{ int i,j; i=low,j=high; //初始化待划分区间

2015-09-12 13:39:40 723

原创 最长递增子序列问题

给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6,7,8},长度为4.#include#define maxn 100//假设最多有100个元素using namespace std;int L[maxn];//L[i]表示元素序列data[0]

2015-09-02 19:45:16 273

原创 0/1背包

在0/1背包问题中,需对容量为c 的背包进行装载。从n 个物品中选取装入背包的物品,每件物品i 的重量为wi ,价值为vi 。对于可行的背包装载,背包中物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高。如:输入 n=5,c=10 w[n]={2,2,6,5,4},v[n]={6,3,5,4,6}  输出 最优解X={1,1,0,0,1},1表示装入,0表示不装入。最大价值为15

2015-09-02 17:09:16 430

原创 多段图的最短路径问题

求源点0到终点9的最短路径#include #define maxn 100 //假设最多有100个点using namespace std;const int MAX=999999;//假设每条边的权值均不超过MAXint arc[maxn][maxn];//权值数组int cost[maxn]; //存储路径长度int path[maxn]; //存储路径

2015-09-02 17:03:06 4164 3

原创 最大子段和问题

给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值,当所给的整均为负数时定义子段和为0如:序列{-20,11,-4,13,-5,-2}的最大子段和为20#include#define maxn 100using namespace std;int data[maxn];int n

2015-08-29 09:38:32 264

原创 快速排序

给定数字n,然后n个数字,对这n个数字进行升序排序#include#define maxn 100using namespace std;int data[maxn];int n;int inp(int first,int end)//起始下标和终点下标{ int i=first,j=end; while(i<j) { w

2015-08-28 20:29:25 203

原创 插入排序

给定数字n,然后n个数字,对这n个数字进行升序排序 #include#define maxn 1000using namespace std;int data[maxn];int n;int inp(){ for(int i=2;i<=n;i++) { data[0]=data[i];//设置哨兵 in

2015-08-27 22:17:46 216

原创 选择排序

给定数字n,然后n个数字,对这n个数字进行升序排序#includeusing namespace std;int main(int argc,char *argv[]){ int n; int k,max; while(cin>>n) { int data[n]; for(int i=0;i<n;i

2015-08-26 12:56:12 218

原创 冒泡排序

给定数字n,然后n个数字,对这n个数字进行升序排序#includeusing namespace std;int main(int argc,char *argv[]){ int n; while(cin>>n) { int data[n]; for(int i=0;i<n;i++) c

2015-08-26 12:53:49 226

原创 最左边的数

求n^n最左边的数分析:设n^n= d.xxx* 10^ (k-1) ,其中k表示n^n的位数。那么d.xxx= 10^(log10(n^n)-(k-1)) ,再对d.xxx取整即可获得最终结果。那么k是多少呢?k = log10(n^n)的整数部分+1 = (int)log10(n^n)+1;至此,可以获得d的计算公式为d = (int)(10^(log10(n^n)-(in

2015-08-26 11:46:43 329

原创 n!的长度(stirling公式的应用)

由stirling公式可得log10(n!)=(log10(2*pi*n))/2+n*log10(n/e),故n!的位数为(int)(log10(2*pi*n))/2+n*log10(n/e)+1pi=3.141592653589793239,e=2.7182818284590452354#include#includeusing namespace std;const doubl

2015-08-26 10:46:06 286

原创 N!的长度

一个数n的位数为(int)log10(n)+1,所以n!的位数为(int)log10(n!)+1,又因为n!=1*2*3*……*n,故log10(n!)=log10(1)+log10(2)+……+log10(n);#include#includeusing namespace std;int main(){ int n; double s

2015-08-26 10:26:18 305

原创 memset()函数与sort()函数

数组的初始化及数据的排序#include #include#include#includeusing namespace std;int main(){ int n; while(cin>>n) { int data[n]; memset(data,0,sizeof(data));//memset(数

2015-08-26 10:18:08 221

原创 最短路(hdu1874)Floyd算法

Problem Description某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。 Input本题目包含多组数据,请处理到文件结束。每组数据第一行包

2015-08-25 11:46:19 525

原创 N!末尾有多少0(素因子分解)

N!末尾有多少0分析:出现0的情况那么只有2*5的情况可以得到,那么我们可以对n!进行素因子分解,因为分解后2的个数一定是大于5的个数的因此我们只需要统计n!含有的素因子5的个数#include #includeusing namespace std;const int maxn=2000;using namespace std;int fac(int N){

2015-08-24 19:20:27 350

原创 poj2503

DescriptionYou have just moved from Waterloo to a big city. The people here speak an incomprehensible dialect of a foreign language. Fortunately, you have a dictionary to help you understand them.

2015-08-24 19:02:01 224

原创 完数(hdu1406)枚举

Problem Description完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6=1+2+3;28=1+2+4+7+14。本题的任务是判断两个正整数之间完数的个数。 Input输入数据包含多行,第一行是一个正整数n,表示测试实例的个数,然后就是n个测试实例,每个实例占一行,由两个正整数num1和num2组

2015-08-24 18:55:19 277

原创 最短路(hdu2544)Dijkstra算法

Problem Description在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?Input输入包括多组数据。每组数据第一行是两个整数N、M(N输入保证至少存在1条商店到赛场的路线。 Output

2015-08-24 16:59:06 300

原创 最小生成树(hdu1233)Prim算法

Problem Description某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 Input测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( 当N为0时,输入结

2015-08-23 12:35:35 264

原创 字符串匹配(KMP算法)

InputThe first line of the input file contains a single number: the number of test cases to follow. Each test case has the following format:One line with the word W, a string over {'A', 'B',

2015-08-22 13:21:24 213

原创 线段树(hdu1166 敌兵布阵)

Problem DescriptionC国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视

2015-08-22 11:40:52 226

原创 线段树(hdu1754 I hate it)

Problem Description很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。 Input本题目包含多组测试,请处理到文件结束。在每个测试的第一行,有两个正整数 N 和 M ( 0

2015-08-21 12:34:41 260

原创 求两个数的最大公约数(欧几里德算法)

欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数

2015-08-20 11:57:56 362

原创 二分之查找

给出一组整数,整数个数不超过100000,求这组整数中是否有k。#include #include#include#define max_size 100using namespace std;int n,k;int data[max_size];int search(){ int low,high,mid,ans=-1; high=n-1;

2015-08-19 15:15:01 238

原创 二分之求零点

现在给你方程 8*x^4+ 7*x^3 + 2*x^2 + 3*x + 6 == Y,给你Y的值,请你解出这个方程x在[0,100]以内的解。#include #includeusing namespace std;double calculate(double x) { return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6; }in

2015-08-19 15:00:48 324

原创 广搜之寻找最短路径

题意:给定一个二维数组,从@出发,寻找到达E的最短路径,#表示墙壁,不能通行如:@----#         ---#-#         -----E#include #include using namespace std;const int maxn=30;char map[maxn][maxn];int vis[maxn][maxn]; //判重

2015-08-19 14:27:00 432

原创 贪心之背包问题

题意:有n个物品,每个物品的重量为weight[i],每个物品的价值为value[i]。现在有一个背包,它所能容纳的重量为total,问:当你面对这么多有价值的物品时,你的背包所能带走的最大价值是多少?(注意和0/1背包问题的区别,在背包问题中,可以选择将某种物品的一部分装入背包中,但不可以重复装入)分析:选择单位重量价值最大的物品#include #include#inc

2015-08-19 13:02:36 314

原创 贪心之多机调度问题

1、问题描述     设有n个独立的作业{1, 2, …, n}, 由m台相同的机器进行加工处理. 作业i所需时间为t i. 约定:任何作业可以在任何一台机器上加工处理, 但未完工前不允许中断处理,任何作业不能拆分成更小的子作业。要求给出一种作业调度方案,使所给的n 个作业在尽可能短的时间内由m台机器加工处理完成。 2、贪心算法求解思路 将n个作业依其所需的处理时间从大

2015-08-19 12:09:11 1920

原创 字符串之简单模式匹配算法(BF)

•算法设计思想:•将主串S的第pos个字符和模式T的第1个字符比较,–若相等,继续逐个比较后续字符;–若不等,从主串S的下一字符(pos+1)起,重新与T第一个字符比较。 •直到主串S的一个连续子串字符序列与模式T相等。返回值为S中与T匹配的子序列第一个字符的序号,即匹配成功。•否则,匹配失败,返回值 0 .#include#include

2015-08-18 18:35:16 399

原创 深搜

Problem DescriptionThere is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adja

2015-08-18 17:45:43 245

原创 广搜

Problem DescriptionThere is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adja

2015-08-18 17:17:18 353

原创 贪心之活动安排

问题描述:     设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当

2015-08-17 21:43:50 484

原创 高精度之快速幂

快速幂采用的是二分的思想,(a^b)%c,当b比较大时可将其分解,当b为偶数时,(a^b)%c=(a^(b/2)*a^(b/2))%c;当b为奇数时,(a^b)%c=(a^(b/2)*a^(b/2)*a)%c.模运算:(a+b)%p=(a%p+b%p)%p;(a-b)%p=(a%p-b%p)%p;(a*b)%p=(a%p*b%p)%p;ab%p=((a%p)b)%p结合率:((a+b)

2015-08-17 19:58:21 460

原创 高精度之减法运算

#include#includeusing namespace std;char a[101],b[101];int ai[101],bi[101];int tmp[101];int a_len,b_len;int flag;bool fg(){ flag=0; if(a_len>b_len) return true;

2015-08-17 18:49:27 272

原创 高精度之乘法运算

#include #includeusing namespace std;char a[101],b[101];int len_a,len_b;int ai[101],bi[101];int tmp[202];void inp(char s[],int si[]){ int len=strlen(s); for(int i=0;i<len;i+

2015-08-17 17:04:18 231

原创 fibonacci(n<=10000)

#include #includeusing namespace std;const int maxn=10000;int data[maxn][maxn];void inp(){ memset(data,0,sizeof(data)); data[0][maxn-1]=0; data[1][maxn-1]=1; for(int i=2;

2015-08-13 17:21:53 353

原创 fibonacci(n<=45)

#include using namespace std;int main(){ int n; int f[50]; f[0]=0; f[1]=1; for(int i=2;i<=45;i++) f[i]=f[i-1]+f[i-2]; while(cin>>n) cout<<f[n]

2015-08-13 12:21:55 299

原创 贪心法之埃及分数

题目:在古埃及,人们使用单位分数的和(形如1/a的, a是自然数)表示一切有理数。 如:2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为加数中有相同的。 对于一个分数a/b,表示方法有很多种,但是哪种最好呢? 首先,加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越好。分析:有理数a/b,设c是b/a的商,e为余数,则b=a*c+e,b/a=c+e/a

2015-08-13 11:55:07 811

空空如也

空空如也

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

TA关注的人

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