02 2012 档案

摘要:中国剩余定理例1:一个数被3除余1,被4除余2,被5除余4,这个数最小是几?题中3、4、5三个数两两互质。则〔4,5〕=20;〔3,5〕=15;〔3,4〕=12;〔3,4,5〕=60。为了使20被3除余1,用20×2=40;使15被4除余1,用15×3=45;使12被5除余1,用12×3=36。然后,40×1+45×2+36×4=274,因为,274>60,所以,274-60×4=34,就是所求的数。例2:一个数被3除余2,被7除余4,被8除余5,这个数最小是几?题中3、7、8三个数两两互质。则〔7,8〕=56;〔3, 阅读全文
posted @ 2012-02-29 22:41 yejinru 阅读(238) 评论(0) 推荐(0) 编辑
摘要:/*题目1)简介输入:正则表达式字符串 待匹配字符串,如果输入”### ###”程序终止,输出:如匹配成功,输出整个字符串,如果匹配不成功,输出lost,然后等待下一次用户的输入。^ 代表字符串开始. 代表任意字符$ 代表字符串末尾2)参考输入,输出^a.$ abc ←regular express and target string (separate by space),inputlost ←result, outputab.$ ababc ←regular express and target string (separate by space), inputababc ←match s 阅读全文
posted @ 2012-02-29 22:41 yejinru 阅读(5909) 评论(0) 推荐(1) 编辑
摘要:编辑器加载中...本电子词典功能:查单词,单词复习,单词学习,单词填空,根据汉语输入英文,有时间提示的单词风暴第一部分:main函数编写#include <stdio.h>#include <string.h>#include "list.h"#include "tool.h"#include "game.h"#include <stdlib.h>int main(){int m=0,n=7950,c;char ch[130];struct wordnode *head=NULL;head=Crea 阅读全文
posted @ 2012-02-29 22:40 yejinru 阅读(680) 评论(0) 推荐(1) 编辑
摘要:ZOJ自己做了的(简单题,可直接点击题号到该题网页):1001 1002 1037 1045 1048 1049 1057 1067 1073 1078 1086 1089 1090 1095 1109 1110 1115 1151 1195 1240 1241 1251 1295 1414 1631 1715 1730 1755 1760 1763 1796 1884 1915 2001 2022 2060 2095 2099 2104 2108 2172 2176 2186 2201 2321 2345 2388 2405 2417 2421 2433 2476 2478 2480 248 阅读全文
posted @ 2012-02-29 22:40 yejinru 阅读(1078) 评论(0) 推荐(1) 编辑
摘要:#include <stdio.h>#include <stdlib.h>#define MAXN 1000 typedef struct queue{int qq[MAXN]; //队中元素int front; //队首下标int rear; //队尾下标int count; //队列中元素个数}queue;queue *q;int init() //队列初始化{q=(struct queue*)malloc(sizeof(struct queue)); //申请内存q->front=0; //都置为0q->rear=0;q->count=0;ret 阅读全文
posted @ 2012-02-29 22:38 yejinru 阅读(293) 评论(0) 推荐(0) 编辑
摘要:#include <cstdlib>#include <iostream>#include <cstdio> using namespace std;#define X 150001typedef struct node{ int id,m; int key; //按顺序}node;struct node f[X];int cmp(const void *a,const void *b){ struct node *c=(node *)a; //强转 struct node *d=(node *)b; if(d->m==c->m) //如果相等, 阅读全文
posted @ 2012-02-29 22:37 yejinru 阅读(175) 评论(0) 推荐(0) 编辑
摘要://贪心法,使用排序函数,每次都找最便宜的牛奶,然后判断够没够重量#include <iostream>#include <algorithm>#define X 5010using namespace std;typedef struct milk //定义牛奶结构体{ int p; int a;}milk;int cmp(milk a,milk b) //对牛奶结构体排序{ return a.p<b.p; }int main(){ int n,m; freopen("sum.in","r",stdin); freopen 阅读全文
posted @ 2012-02-29 22:37 yejinru 阅读(283) 评论(0) 推荐(0) 编辑
摘要:1000 A+B Problem 10% 直接加1002 Phone Numbers 50% 动态规划或最短路1003 Parity 70% 区间减法1004 Sightseeing trip 60% 最短路1005 Stone Pile 30% 动态规划或搜索1006 Square Frames 35% 模拟1007 Code Words 30% 模拟1008 Image encoding 30% 广度优先搜索1009 K-Based Numbers 20% 递推或枚举(数据规模小) 1010 Discrete Function 40% 贪心1011 Conductors 25% 搜索101 阅读全文
posted @ 2012-02-29 22:36 yejinru 阅读(306) 评论(0) 推荐(1) 编辑
摘要:Find a minimal interger K which is merely comprised of N and can be divided by M.For example,11 is the minimal number that and be divided by 11, and it is comprised of two '1's, and 111111 can be divided by 13 which is comprised of six '1's.InputOn each line of input , there will be 阅读全文
posted @ 2012-02-29 22:35 yejinru 阅读(372) 评论(0) 推荐(0) 编辑
摘要:编辑器加载中...自己写了一个:根据m^n mod y,m*m*...*m = y*x+r,再乘以m时相当于r乘以m即可同理,令r = 1,r = (r*m)%y,这样相乘n次,我的模板(时间复杂度为O(n)),n太大时,可能超时:int r = 1;for(j=0;j<n;j++)r = (r*i)%m;求a^b%c(这就是著名的RSA公钥的加密方法) 算法1:直接将b个a相乘,利用a*b%c=((a%c)*b)%c,每一步都进行这种处理,解决了a^b可能太大存不下的问题,这个算法的时间复杂度是O(n)。当b很大时运行时间会很长 。 算法2:利用分治的思想,可以达到O(logn)。 可 阅读全文
posted @ 2012-02-29 22:34 yejinru 阅读(195) 评论(0) 推荐(0) 编辑
摘要:偶做完的:1000100110021003100410051006100710081011101210141017102810391041104610471050106110641066106710681080108810891094110111021106111311181125112611271129114011411144114511491151115911631164118211901195120112041207122212261228123612371247125112581265126912701273127412761284128613081325132813301338135 阅读全文
posted @ 2012-02-29 22:32 yejinru 阅读(547) 评论(0) 推荐(1) 编辑
摘要:第一道懂的深度优先搜索题,找图中八连块的个数#include <iostream>#include <cstring>using namespace std;#define X 100int visit[X][X];int a[X][X];void dfs(int x,int y) //深度优先搜索{if(visit[x][y]||!a[x][y]) //如果是白色或者是遍历过的return;visit[x][y] = 1; //遍历过的标记为一dfs(x-1,y-1); dfs(x-1,y); dfs(x-1,y+1); //递归遍历周围dfs(x,y-1); dfs 阅读全文
posted @ 2012-02-29 22:31 yejinru 阅读(149) 评论(0) 推荐(0) 编辑
摘要:题目:给出两个顶点并且给出两个顶点之间的概率,求从1到n的最大的概率分析:纯粹是dijkstra算法,只不过把最短路径改动一下而已要先定义dp[n]=1;后面的直接套用dijkstra模板,把min部分改为max即可,并且之前加的部分改为相乘即可dijkstra模板:设图由邻接矩阵g存储。memset(dist,0x3f,sizeof(dist));memset(used,false,sizeof(used));dist[0]=0;//设0为源点for(i=0;i<n;i++)//循环n次{min=10000000;for(j=0;j<n;j++)//找到最小值if(!used[j 阅读全文
posted @ 2012-02-29 22:31 yejinru 阅读(154) 评论(0) 推荐(0) 编辑
摘要:题目:回文是一个对称的字符串,换句话说,这个字符串从左到右读和从右到左读是一样的。给出一个字符串,你要编一个程序,决定要插入的最少的字符个数,使得原字符串成为一个回文。比如,字符串”Ab3bd”中插入2个字符,使得它能变成一个回文("dAb3bAd" 或 "Adb3bdA")。如果插入少于2个字符,将无法产生回文。求最少插入几个字符,使其变成回文字符串分析:S1 = Ab3bd 的反转为S2 = db3ba要使S1变成回文字符串,可先求出S1,S2的最长公共子序列,用n-lcs(S1,S2)即可,本题转化为求S1,S2的最长公共子序列状态转移方程:if( 阅读全文
posted @ 2012-02-29 22:30 yejinru 阅读(213) 评论(0) 推荐(0) 编辑
摘要:******************************************************************************* 简单题(包括枚举,二分查找,(复杂)模拟,基础数据结构(栈、队列),杂题等 * ******************************************************************************1001 A+B1002 A+B+C1009 Fat Cat1010 The Angle1011 Unix ls1012 Decoding Task1019 Grandpa's Other Est 阅读全文
posted @ 2012-02-29 22:30 yejinru 阅读(2375) 评论(0) 推荐(1) 编辑
摘要:/*记忆化搜索,每次遍历到该位置,先把他能够遍历的邻点遍历完,直到不能遍历为止,然后选择四个可走的邻接点的最值,利用数组记录当前位置的最优值,若遇到已经遍历过的位置时,直接返回该位置的最优值,完成该次递归*/#include <iostream>#include <cstring>#include <cstdio>using namespace std;#define X 102int map[X][X],dp[X][X],n,m;int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}}; //状态偏移量int f(int x, 阅读全文
posted @ 2012-02-29 22:29 yejinru 阅读(134) 评论(0) 推荐(0) 编辑
摘要:题目:纯粹最长上升子序列(lis:Longest Increasing Subsequence)状态转移方程(时间复杂度为O(n*n)) if(a[i]<a[j])dp[i]=Max(dp[i],dp[j]+1);解一:根据状态转移方程:if(a[i]<a[j])dp[i]=Max(dp[i],dp[j]+1);#include <iostream>#include <cstring>using namespace std;#define X 1003int dp[X];int a[X];int Max(int a,int b){return a>b? 阅读全文
posted @ 2012-02-29 22:29 yejinru 阅读(181) 评论(0) 推荐(0) 编辑
摘要:/*题目: 求最大子矩阵的和分析: 我的做法: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 我们可以按每一行计算从j开始到k结束的该段和,用dp[i][j][k] 表示第i行的元素从下标j开始到k结束的和,把每一行的都求出, 从而转化为求每一列的最大子序和,本例中, 先求dp[0][0][0] = a[0][0],dp[0][0][1] = a[0][0]+a[0][1],... 从而求完n行,时间复杂度为O(n*n*n),然后每一列dp根据一维最大 子序列和来计算,算出最大的和即... 阅读全文
posted @ 2012-02-29 22:28 yejinru 阅读(260) 评论(0) 推荐(0) 编辑
摘要:参考别人的程序后弄明白了,看来我还是很菜啊==!别人:状态定义为dp[i],在i之前要达到合法message需要删除的最少的字符数,转移的时候是dp[i-1]+1和dp[i-(能匹配的字典串的长度+需要删除的字符串的长度)]+需要删除的字符串的长度。自己:定义状态为dp[i],dp[i]为i前的单词最少要删除的字母数,当i=i+1时,判断target[i]==word[j][word[j].size()-1]是否相等,即判断该单词与字典中的单词的最后一位是否匹配,匹配的话往前算算是否该字典中的单词全部出现在要求匹配单词中,如果是并且该dp小于dp[i]+1的话,转移!转移方程为:dp[i]=m 阅读全文
posted @ 2012-02-29 22:28 yejinru 阅读(126) 评论(0) 推荐(0) 编辑
摘要:矩阵链乘法:矩阵P={}标准模板:for(int i=2;i<=n;i++)for(int j=1;j<=n-i+1;j++){int temp = i+j-1;dp[j][temp] = 1000000000;for(int k=j;k<=temp-1;k++){v = dp[j][k]+dp[k+1][temp]+p[j-1]*p[k]*p[temp];if(v<dp[j][temp]){dp[j][temp] = v;s[j][temp] = k;}}}相乘次数(答案) = dp[1][n]打印最佳链乘表达式:void print(int i,int j){if( 阅读全文
posted @ 2012-02-29 22:27 yejinru 阅读(188) 评论(0) 推荐(0) 编辑
摘要:莫非就是最长子序列和?#include <iostream> using namespace std;#define X 10002int a[X];int main(){freopen("sum.in","r",stdin);freopen("sum.out","w",stdout);int n;while(cin>>n,n){for(int i=0;i<n;i++)cin>>a[i];int max = -2001;int sum = 0;for(int i=0;i&l 阅读全文
posted @ 2012-02-29 22:26 yejinru 阅读(102) 评论(0) 推荐(0) 编辑
摘要:题目: 动态规划版的硬币交换问题,求用最少的不同价值的硬币总数来换给出的硬币总数,如硬币只有1,6,10时,按贪心算法做就是先给价值为10的硬币,再给两枚价值为1的硬币,总硬币数为3,可是只需要两枚价值为6的硬币即可分析:用dp[i][j]来记录当前的硬币价值总数为j时需要的硬币最小数,i表示从硬币i到n的种类,j表示剩余的未交换的硬币价值总数,则状态转移方程为for(int j=0;j<=n;j++)dp[i][j] = j;dp[i][j] = dp[i+1][j] 当denom[i]>j时= min{dp[i+1][j],dp[i][j-denom[i]]+1}当j>= 阅读全文
posted @ 2012-02-29 22:26 yejinru 阅读(1152) 评论(0) 推荐(0) 编辑
摘要:LCS最长公共子序列模板:状态转移方程为dp[i][j]=dp[i-1][j-1]+1 if(in[i]==target[i])=max{dp[i-1][j],dp[i][j-1]} else;void LCSLength(int m,int n,char *x,char *y,int **c,int **b){ int i,j;for (i = 1; i <= m; i++) c[i][0] = 0;for (i = 1; i <= n; i++) c[0][i] = 0;for (i = 1; i <= m; i++)for (j = 1; j <= n; j++) 阅读全文
posted @ 2012-02-29 22:25 yejinru 阅读(196) 评论(0) 推荐(0) 编辑
摘要:题目:A = {a1,a2...an}函数D(A) = A1+A2;A1 = {as1...at1}A2 = {as2...at2}1<=s1<=t1<=s2<=t2例子:A = {1 -1 2 2 3 -3 4 -4 5 -5}在这个例子中,选择{2,2,3,-3,4} 和 {5},得到答案。分析:最大子序列和,时间复杂度为O(n)int max = 0,current = 0;for(int i=0;i<n;i++){current+=a[i];if(current>max)max = current;if(current<0)current = 阅读全文
posted @ 2012-02-29 22:25 yejinru 阅读(160) 评论(0) 推荐(0) 编辑
摘要:题目:链 AGTGATGGTTAG可变形成AGTGAT-G-GT--TAG从而得到和最大分析:dp问题,属于最长公共子序列的变形题,用二维dp[i][j]存储当前串一的i位置和串二j位置上的和最大值,答案为dp[len1][len2],用地图map[i][j]存储AGCT的匹配程度,把输入的字符串用数组表示,并且a[i][j],b[i][j]与地图的对应更容易计算状态转移方程为dp[i][j]=max{dp[i][j],dp[i][j-1]+map[a[i]][5],dp[i-1][j]+map[5][b[j]],dp[i-1][j-1]+map[a[i]][b[j]]}#include &l 阅读全文
posted @ 2012-02-29 22:24 yejinru 阅读(159) 评论(0) 推荐(0) 编辑
摘要:题目:岛上的居民要修最短的路来使得费用最少分析:实际上是求最小生成树,可以用prim算法和kruskal算法,基于刚学kruskal算法,以下是用kruskal算法做的。kruskal算法的思想是:先把所有的边按照非降序排列,从而观察每条边是否能与以前的边组成环,能的话就不选,不能的话就选择,而判断是否组成环路的话可以通过使用并查集实现并查集的思想是:{1,2,3},{4,5},{6,7,8},{9},当该边是当前最少的边时,两端顶点为1,4,因为1,4在两个不同的集合中,故而不能组成回路,假设在同一集合中,如1和2,因为前面肯定1,2,3能直接或间接相连接,加入边(1,2)可定能使该图组成环 阅读全文
posted @ 2012-02-29 22:23 yejinru 阅读(221) 评论(0) 推荐(1) 编辑
摘要:题目:三维迷宫题:分析:在二维迷宫上多了上下搜索,求最优解,用BFS做,用队列储存上一个搜索过的节点,在下一次搜索时把删除最先入队的那个就行,另外得储存上一次的坐标,可以直接把x,y,z坐标分别乘以10000,100,1就行(注意到数据不超过30),把它作为新元素加入到队首中,借助数组判断是否已经走过,可以节省大量时间#include <iostream>#include <cstring>#include <queue>#include <string>#include <cstdio>using namespace std;#de 阅读全文
posted @ 2012-02-29 22:22 yejinru 阅读(200) 评论(0) 推荐(0) 编辑
摘要:题目:有s个satellite channels,但有p(p>s)个地方,若任意两个地方有satellite channels,则无视该距离,并且剩余的地方只能与其他地方通过无线电连接,需要距离,且需要的距离只与最大距离有关,问该最大距离的最小值(大概是这样啦)分析:实际上就是求最小生成树中的第p-s大的数,可以先通过prim算法生成最小生成树,然后通过对生成树中的边进行快速排序,得到第p-s大的数#include <iostream>#include <cstring>#include <cstdio>#include <algorithm&g 阅读全文
posted @ 2012-02-29 22:22 yejinru 阅读(259) 评论(0) 推荐(0) 编辑
摘要:题目大意就是给出一个不超过2^31的数,来判断它是否为素数,对于此题的规模,一般的素性检测显然不行,要用到Miller rabin, 这个算法主要是基于费尔马小定理,如果 n 为素数,那么对于小于n的数a有a^(n-1) = 1(mod n) ('='在这里就代表同余符号)。显然这是一个必要条件,然而只要满足这个条件就基本上是一个素数了,称为‘伪素数’,正确率为1-(1/4)^m,m用不同的基测试的次数,所以多测试几次就可以保证结果的正确了#include <iostream>#include <cstdlib>#include <cstdio&g 阅读全文
posted @ 2012-02-29 22:21 yejinru 阅读(272) 评论(0) 推荐(0) 编辑
摘要:题目:每次每一位上只能该位变一个数字,并且组成一个新的素数,问最少能用多少次变成第二个给出的素数分析:既然归类到了BFS,可以用BFS来做,可先生成一个素数判断表,加快判断,然后枚举每一位上的数,给以往的BFS一样,只不过每次要计算0到9而已(注意:千位上不能为0,个位上是偶数的话就不用考虑了)#include <iostream>#include <cstring>#include <queue>using namespace std;int m,n,ans;int a[6];bool isprime[10000],use[10000];void make 阅读全文
posted @ 2012-02-29 22:21 yejinru 阅读(134) 评论(0) 推荐(0) 编辑
摘要:最长公共子序列状态转移方程为dp[i][j] = dp[i-1][j-1]+1 s1[i]==s[j]= max{dp[i-1][j],dp[i][j-1]} s1[i]!=s2[j]#include <iostream>#include <cstring>#include <string>using namespace std;#define X 255int dp[X][X];string s1,s2;int main(){freopen("sum.in","r",stdin);freopen("sum. 阅读全文
posted @ 2012-02-29 22:20 yejinru 阅读(117) 评论(0) 推荐(0) 编辑
摘要:题目:问那个人可以走完所有的城市的最大承载量是多少分析:求最大生成树的边的最小值,可以用dijkstra算法变形做,相当于把求最小值改为求最大值,只需把dist初始化为0,并且min处改为max = -1,注意到可能为0,再改动其他地方就行,详细看代码。。。设图由邻接矩阵g存储。memset(dist,0x3f,sizeof(dist));memset(used,false,sizeof(used));dist[0]=0;//设0为源点for(i=0;i<n;i++)//循环n次{min=10000000;for(j=0;j<n;j++)//找到最小值if(!used[j]& 阅读全文
posted @ 2012-02-29 22:19 yejinru 阅读(131) 评论(0) 推荐(0) 编辑
摘要:题意:给出一个区间,长度<=1000 000;求其中素数相邻素数之间的差最小的和最大的;分析:双重筛法,其中区间的数可能较大,因此如果用试除法的话,显然不行的;用筛选法,首先第一次筛选出从1到47000之间的素数;第二次筛选时,利用第一次筛选出来的素数,判断L到U区间范围内的数是否是素数;因为范围是1<=L< U<=2,147,483,647,而U-L<=1000 000;所以我们可以设置一个1000000以内的数组,用res[i-L]的值为0或者1来表示是否是素数;核心算法是第二次的筛选,其中j=begin*prime[i]表示的是在A,B区间中prime[i] 阅读全文
posted @ 2012-02-29 22:19 yejinru 阅读(191) 评论(0) 推荐(0) 编辑
摘要:题目:求第几个只拥有素数因素为2,3,5的数,包括1在内分析:因为只要求求到第1500个,可以用打表的方法来做,把前1500个数全部求出来,因为每一个ugly数都可以用某个以前的数来进行因素分解,所以不停地搜索当2,3,5乘以某个数恰好大于当前最大的ugly,这个数即为最新的ugly数,具体请看代码:#include <iostream>using namespace std;#define X 1505int ugly[X];//记录前1500个ugly数int tot;void solve()//搜索函数{ int tot = 0;int p2 =1, p3 = 1,p5 =1 阅读全文
posted @ 2012-02-29 22:16 yejinru 阅读(154) 评论(0) 推荐(0) 编辑
摘要:题目:判断有没有两个电话号码能构成前缀关系分析:动态构树果然是Time limitted,只能是用静态构树或者直接安字典序排完序后比较相邻两个是否能构成前缀关系。。。下面简单说说动态构树吧(应该是对的。。)下面这个程序因为判了time limitted,应该是对的。。。#include <iostream>#include <cstdio>using namespace std;struct trie{ //定义字典树bool end;bool id;trie *p[10];//一共十位数字trie(){end = false;//判断此处到根处有没有单词,有返回tru 阅读全文
posted @ 2012-02-29 22:15 yejinru 阅读(234) 评论(0) 推荐(1) 编辑
摘要:题目;如何只用两个容器装到c的水量分析:BFS题,只不过要记录路径,参考算法导论上的BFS算法(我是参考别人的程序的,又学到了新东西)。在这里简单总结一下:见代码中的文字#include <iostream>#include <queue>#include <cstring> using namespace std;#define X 105int a,b,c;bool use[X][X];///////此结构体为记录ab的水量以及总走过的次数typedef struct{int a; //a的水量int b; //b的水量int step;//总次数}No 阅读全文
posted @ 2012-02-29 22:15 yejinru 阅读(188) 评论(0) 推荐(0) 编辑
摘要:题目:给出英文和密码文的互译,现在给出密码文求给出英文解析分析:还是可以用字典树来构造的(当然还可以用快排+二分法,哈希函数做),先给出trie树的构造吧#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define X 12#define MAXN 100005char ch[2*X],s1[MAXN][X],s2[X];int cnt;struct trie //定义字典树的结构体{bool haveend;//记录是否有单词在这结束的int id; // 阅读全文
posted @ 2012-02-29 22:14 yejinru 阅读(282) 评论(0) 推荐(0) 编辑
摘要:题目:问你最短能构成前缀的且不包括已有的单词(当没有时为自己)的单词分析:用trie树做,动态构树,然后从根节点开始往下找,当找到之前是已经有单词或者该处的单词已经走过该节点,继续往下,直到这两个条件不成立为止#include <iostream>#include <cstring>#include <cstdio>using namespace std;struct trie{ //trie树bool haveword;//标记是否已有树int num; //表示到目前为止单词走过该节点的单词数trie *p[26];trie(){haveword = f 阅读全文
posted @ 2012-02-29 22:13 yejinru 阅读(144) 评论(0) 推荐(0) 编辑
摘要:/*原来动态构树是这么费时间的。。。20000个单词最长为20个的题,跑到了1688MS,题目:题目大概是说找出相同的字符串并且统计个数。分析:因为昨天刚学完trie树,现在练了几道,有点感觉了,其实本题应该是可以用快排直接安字典序进行排序,然后按前后关系来进行判断有多少个的,下面继续讲讲trie树动态构树法吧:看程序解析*/#include <iostream>#include <cstring>#include <cstdio>using namespace std;#define X 20005int d[X],cnt,print[X];structt 阅读全文
posted @ 2012-02-29 22:13 yejinru 阅读(204) 评论(0) 推荐(0) 编辑
摘要:#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define X 1000005char s[X],p[X];int Next[X],len1,len2;void shift() //计算移动的模板{int i,j = -1;Next[0] = -1;for(i=1;i<len2;i++){while(j!=-1&&s[j+1]!=s[i])j = Next[j];if(s[j+1]==s[i])j++;Next[i] = j;}}in 阅读全文
posted @ 2012-02-29 22:12 yejinru 阅读(162) 评论(0) 推荐(0) 编辑
摘要:题目:求最大公共子序列(LCS)分析:用dp做,郁闷,还真有空格出现了,之前用scanf读入WA,改用gets读入A了状态转移方程式为dp[i][j] = dp[i-1][j-1]+1, s1[i]==s2[j]= max{dp[i-1][j],dp[i][j-1]} s1[i]!=s2[j]#include <iostream>#include <cstring>#include <cstdio>using namespace std;#define X 1005char s[X],ch[X];int dp[X][X];int main(){freopen 阅读全文
posted @ 2012-02-29 22:12 yejinru 阅读(108) 评论(0) 推荐(0) 编辑
摘要:Tangled in CablesYou are the owner of SmallCableCo and have purchased the franchise rights for a small town. Unfortunately, you lack enough funds to start your business properly and are relying on parts you have found in an old warehouse you bought. Among your finds is a single spool of cable and a 阅读全文
posted @ 2012-02-29 22:11 yejinru 阅读(215) 评论(0) 推荐(0) 编辑
摘要:题目: A到B地,要有B到A地才行得通分析: 初始化 a[i] = i,然後讀入x,y,交換a[x],a[y]。最後判斷是否a[i]==i#include <set>#include <map>#include <cmath>#include <queue>#include <stack>#include <string>#include <vector>#include <cstdio>#include <cstring>#include <iostream>#includ 阅读全文
posted @ 2012-02-29 22:10 yejinru 阅读(234) 评论(5) 推荐(0) 编辑
摘要:题目: 输入一串数字,求用这些数字能组成最大的整数分析: 可以用sort()函数比较排序,比较方式为 int cmp(string a,string b){return a+b>b+a;}即可#include <iostream>#include <algorithm>#include <string>using namespace std;string s[52];int cmp(string a,string b){ return a+b>b+a;}int main(){ freopen("sum.in","r& 阅读全文
posted @ 2012-02-22 19:09 yejinru 阅读(135) 评论(0) 推荐(0) 编辑