
算法
zhuguorong11
这个作者很懒,什么都没留下…
展开
-
KMP算法
//KMP#include#include#include#includevoid get_next(char *T,int *next){ next[1] = 0; int j = 1; int i = 0; while(j < T[0])//T[0]存放字符串的长度,j为后缀,i为前缀 { if(0 == i||T[i] == T[j]) { i++;原创 2016-04-24 21:01:08 · 379 阅读 · 0 评论 -
八皇后问题,递归法
#include#includeint count = 0;//成功的次数//判断在对角线或者同行同列上是否有皇后int notDanger(int row,int j,int (*chess)[8]){ int flag1 = 0,flag2 = 0,flag3 = 0,flag4 = 0,flag5 = 0,flag6 = 0; //判断列方向是否安全 for(int i原创 2016-04-24 16:20:57 · 308 阅读 · 0 评论 -
SIFT算法
http://blog.youkuaiyun.com/pi9nc/article/details/23302075转载 2016-04-11 14:08:35 · 346 阅读 · 0 评论 -
动态规划算法
一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能转载 2016-03-23 21:21:01 · 282 阅读 · 0 评论 -
北大1114 神奇的口袋
#include#include#includeusing namespace std;int n;int weight[21];int sum;void doPai(int a[],int &sum,int k,int leftwe){ if(leftwe == 0){ sum++; return ; }else{ if(k>=n||a[k]>lef原创 2016-03-14 09:58:23 · 449 阅读 · 0 评论 -
c++中的 next_permutation的实现
next_permutation得到下一个排列,如对序列 a, b, c,每一个元素都比后面的小,它的下一个序列即为a, c, b#include#include#include//#include#includeusing namespace std;int main(){ char str[10]; while(scanf("%s",str)!=EOF){ i原创 2016-03-12 17:30:12 · 805 阅读 · 0 评论 -
北大点菜问题
背包问题#include#includeusing namespace std; int max(int x,int y){ return x>y?x:y;}int main(){ int money,n; int pi[120],vi[120],dp[1200]; while(scanf("%d%d",&money,&n)!=EOF){原创 2016-03-12 14:37:30 · 468 阅读 · 0 评论 -
北大1160,放苹果,分治法
#include#includeusing namespace std;/** m为苹果数,n为盘子数(m,n)表示总的放法* 则可知:* if(m>=n)即苹果数目多* 没有盘子空的放法为(m-n,n)* 有盘子空的放法为f(m,n-1)+f(m,n-2)+...+f(m,1)* 从而有* (m,n)=(m-n,n)+f(m,n-1)+...+f(m,1)* 其中f(m,原创 2016-03-11 14:01:46 · 522 阅读 · 1 评论 -
北大1154
查找根#include#include#includeusing namespace std;int Tree[50];int findRoot(int x){ if(Tree[x]==-1)return x; else{ int tmp = findRoot(Tree[x]); Tree[x] = tmp; r原创 2016-03-11 10:09:22 · 338 阅读 · 0 评论 -
北大1480 最长子序列和
#include#include#includeusing namespace std;int main(){ int n; int num[1001]={0}; int sum[1001]={0}; while(scanf("%d",&n)!=EOF){ for(int i = 0;i<n;i++) scanf("%d",&num[i]);原创 2016-03-11 09:49:42 · 319 阅读 · 0 评论 -
清华1207
#include#include#includeusing namespace std;bool Judge(int x){ int end = (int)sqrt((float)x)+1; for(int i = 2;i<end;i++) { if(x%i==0) return false; } return true;}int原创 2016-03-10 20:53:06 · 236 阅读 · 0 评论 -
清华1084,整数拆分
#include#includeusing namespace std;int nums[1000001];int main(){ nums[0] = 1; nums[1] = 1; nums[2] = 2; nums[3] = 2; for(int i = 4;i<1000001;i++){ if(i%2==1) nums[i] = nu原创 2016-03-10 19:57:56 · 292 阅读 · 0 评论 -
交大1093
类似与map#include#include#include#includeusing namespace std; int main(){ string ss = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./"; char ch[130]; for(int i = 1;i<ss.length();i+原创 2016-03-10 16:00:20 · 376 阅读 · 0 评论 -
交大1043 day of week
#include#include#includeusing namespace std; int days[13][2]={ 0,0, 31,31, 28,29, 31,31, 30,30, 31,31, 30,30, 31,31, 31,31, 30,30, 31,31, 30,30,原创 2016-03-10 12:03:48 · 360 阅读 · 0 评论 -
交大1042,公共字符串,动态规划
#include#include#includeusing namespace std;int dp[101][101];int max(int a,int b){return a>b?a:b;}int main(){ char s1[101],s2[101]; while(scanf("%s%s",s1,s2)!=EOF){ int len1 = st原创 2016-03-10 11:57:41 · 413 阅读 · 0 评论 -
交大去中值 1097
#include#include#include#includeusing namespace std;int num1[1000001],num2[1000001];//int ans[2000001];//set ss;int main(){ int t; int n1,n2;//两个数组长度 int a,b,c,d; while(scanf("%d",原创 2016-03-10 11:11:25 · 273 阅读 · 0 评论 -
交大1102
暴力法#include#include#includeusing namespace std;int n,m,k;int nums[101][101];int flag,minsum;int main(){ memset(nums,0,sizeof(nums)); while(scanf("%d%d%d",&n,&m,&k)!=EOF){ flag = 0;原创 2016-03-10 10:09:33 · 354 阅读 · 0 评论 -
交大1104,整除问题
//给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。//消去共有因子,避免大数预算/*对每个形如 (A*a+ B)* a^k的数,前面的A 没有意义的,只有B 才有可能继续被用来作为未来的因子,所以每次只需要保留比a 小的B 就够了*/#include#include//#includeusing namespace std; int main(){ i原创 2016-03-09 21:41:46 · 518 阅读 · 0 评论 -
吉林大学1466
不能用传统的排列,数会很大,#include#includeusing namespace std;int find(int x){//找x能被2整除的个数 int res = 0; while(x%2==0){ res++; x = x/2; } return res;}int main(){ int n,m; while(scanf(原创 2016-03-09 12:11:27 · 449 阅读 · 0 评论 -
吉林大学,1477
#include#includeusing namespace std;int main(){ int n,k; int nums[1001]; int tmp[1001]; int x;//第几个开始操作 while(scanf("%d%d",&n,&k)!=EOF){ if(n==0)break; for(int i = 1;i<=n;i原创 2016-03-09 11:07:35 · 462 阅读 · 0 评论 -
字符串匹配。北航
#include#include#include#includeusing namespace std;int main(){ int n; string str[1001]; string a[1001]; string pipei; while(scanf("%d",&n)!=EOF){ for(int i = 0;i<n;i++){ cin>>st原创 2016-03-09 09:06:29 · 411 阅读 · 0 评论 -
字符串中查找删除
#include#include#include#includeusing namespace std;int main(){ char str[101]; gets(str); string a = str; for(int i = 0;i<a.size();i++) a[i] = towlower(a[i]);//全部转成小写字母,方便进行删除原创 2016-03-08 22:46:28 · 513 阅读 · 0 评论 -
数查找,可用数组来解决
#include#include#includeusing namespace std;int main(){ int n; int nums[1001]={0}; int depth; while(scanf("%d",&n)!=EOF){ for(int i = 1;i<=n;i++) scanf("%d",&nums[i]);原创 2016-03-08 22:17:54 · 230 阅读 · 0 评论 -
哈夫曼树
#include#include#includeusing namespace std;priority_queue,greater > q;//小堆栈void init(){ while(!q.empty()){ q.pop(); }}int main(){ int n; int num; while(scanf("%d",&n)!=EOF){ i原创 2016-03-08 18:39:44 · 237 阅读 · 0 评论 -
北京邮电1177,replace和reverse的用法
#include#include#include#include#includeusing namespace std;int main(){ string str; int n; string demand; while(cin>>str){ scanf("%d",&n); for(int i = 1;i<=n;i++)原创 2016-03-08 15:11:39 · 300 阅读 · 0 评论 -
动态定义二维数组
num=(int **)malloc(n*sizeof(int *)); for(i=0;i<n;i++) num[i] = (int *)malloc(n*sizeof(int));原创 2016-03-08 14:29:00 · 420 阅读 · 0 评论 -
华中科技 -1472
解法实则是hash表的运用,hash[次数]=系数#include #include #includeusing namespace std;int array[2001]; int main () { int n,m,i,a,b,first; while (scanf("%d",&n) != EOF){ first = 1;转载 2016-03-08 11:24:41 · 299 阅读 · 0 评论 -
华中科技-二叉树遍历1184,先序建树
#include#include#includeusing namespace std;typedef struct node{ char data; struct node *left; struct node *right;}node;void addLeft(node *root,node *left){ root->left=left;}void add原创 2016-03-07 21:37:49 · 342 阅读 · 0 评论 -
二叉排序数
#include#includeusing namespace std;typedef struct BiNode{ int data; struct BiNode *left; struct BiNode *right;}BiTree,*Bilink;//前序遍历void PreOrder(Bilink bn){ if(bn) { cout原创 2016-03-07 18:53:32 · 748 阅读 · 0 评论 -
1200华中科技
//输出要求很多 如果最大的两个数中的一个数在这一列中有多个相同的值,则行值取行值小的那一个。 输出时要保留原矩阵的行列顺序,即在原矩阵中行值小的,在输出矩阵中的行值依然小。#include#include#includeusing namespace std;int main(){ int n; int nums[4][5]; int ans原创 2016-03-07 16:22:51 · 322 阅读 · 0 评论 -
华中科技1199
#include#include#includeusing namespace std;char cc[101];int main(){ char str[101]; while(scanf("%s",str)!=EOF){ int len = strlen(str); for(int i = 0;i<len;i++) { int loc =原创 2016-03-07 15:17:37 · 228 阅读 · 0 评论 -
清楚小数点后末尾0的影响
void cleanzero(char str[]){ int len = strlen(str),i; if(strstr(str,".")!=NULL){ for(i = len-1;str[i]=='0';i--) str[i]='\0'; if(str[i]=='.') str[i]='\0'; }}原创 2016-03-07 14:28:50 · 360 阅读 · 0 评论 -
华中科技,最短最长文本
要注意只有一个字符串的时候,不能重复输出,并且当有字符串都相等时,也不能重复输出#include#include#includeusing namespace std;int main(){ string str[1000]; //int len[1000];//每个字符串的长度; int min = -1; int max = 0; int c原创 2016-03-07 10:44:58 · 334 阅读 · 0 评论 -
大数的a+b,用c++
#include#include#define N 1010 int main(void) { char num1[N],num2[N]; int length1,length2,c,k,i; while(scanf("%s%s",num1,num2) == 2) { int a[N] =原创 2016-03-07 08:57:01 · 1059 阅读 · 0 评论 -
杭电2086
公式A[i+1]=2A[i]-A[i-1]+2C[i] A[i+1]=3A[i-1]-2A[i-2]+4c[i-1]+2C[i] A[i+1]=4A[i-2]-3A[i-3]+6c[i-2]+4c[i-1]+2C[i] ... A[n+1]=(n+1)A[1]-nA[0]+2*(n*c1+(n-1)*c2+......cn);原创 2016-03-06 21:26:51 · 599 阅读 · 0 评论 -
printf()格式
1.转换说明符 %a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整数 %f 浮点数(包括float和doulbe) %e(%E) 浮点数指数输出[e-(E-)记数法] %g(%G转载 2016-03-06 19:47:01 · 314 阅读 · 0 评论 -
c++字符串与数值之间的转换
#include#include#include#include#includeusing namespace std;string converToString(double x){ ostringstream o; if(o<<x) return o.str();}double converFromString(const string& s){ istrin原创 2016-03-06 07:50:44 · 350 阅读 · 0 评论 -
四柱汉诺塔
多柱汉诺塔可以用Frame–Stewart算法来解决。The Frame–Stewart algorithm, giving a presumably optimal solution for four (or even more) pegs, is described below:Let be the number of disks.Let be the number of转载 2016-03-06 00:39:58 · 3639 阅读 · 0 评论 -
杭电1204
这是一个概率题,首先我们必须清楚我们要求的是什么!设f(i)表示Speakless有i颗糖果的时候赢的概率,我们要求的就是f(n)则根据题意我们知道,这时候:1.Speakless赢这一局的概率是p(1-q),即f(i)变成f(i+1)2.Speakless输这一局的概率是q(1-p),即f(i)变成f(i-1)3.Speakless平这一局的概率是1-p(1-q)-q(1-p),即f转载 2016-03-05 21:33:40 · 366 阅读 · 0 评论 -
动态规划0-1背包问题
链接点击打开链接转载 2016-03-05 20:53:25 · 230 阅读 · 0 评论