symons

___________每一天都是幸福的!!

  博客园  ::  :: 新随笔  ::  :: 订阅 订阅  :: 管理

2012年10月22日

摘要: 1 #include <stdio.h> 2 #include <algorithm> 3 #include <iostream> 4 #define MAXN 10000 5 #define MAXM 50000 6 struct edge 7 { 8 int u,v,w; 9 }edges[MAXM];10 int parent[MAXN];11 int n,m;12 int i,j;13 14 //并查集15 void UFset()16 {17 for(i=1;i<=n;i++)18 parent[i]=-1;19 }20 int Find(i 阅读全文
posted @ 2012-10-22 19:21 symons 阅读(135) 评论(0) 推荐(0)

摘要: 本题就是栈的模拟题,我是自己用数组写的栈,没用STL。没什么说的,上代码。 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 char STACK[100]; 5 int point; 6 char a[100]; 7 char b[100]; 8 string abc[200]; 9 int main()10 {11 int a_p,b_p,i,j,t,n,count;12 while(cin>>n)13 {14 cin>>a>>b;15 mems 阅读全文
posted @ 2012-10-22 15:31 symons 阅读(151) 评论(0) 推荐(0)

摘要: 1 /* 2 这题暴力的话时间复杂度太高。 3 本题是一维最大连续子序列的拓展。 4 求二维的话只要转化为一维就可以了。 5 转化方式。将一列的数字通过n^2的时间复杂度归并成一个数, 6 每次归并一次就遍历一下list求最大值(这步就是执行一维的最大连续子序列)。 7 */ 8 #include <iostream> 9 #include <string.h>10 #include <cmath>11 using namespace std;12 int list[150];13 int gird[150][150];14 void get(int a,i 阅读全文
posted @ 2012-10-22 01:23 symons 阅读(163) 评论(0) 推荐(0)

摘要: 本题是一道DP问题,字符串匹配问题。有3种子问题。1.a[i]与'-'匹配;2.b[j]与'-'匹配;3.a[i]与b[j]匹配。所以状态转移方程有 dp[i][j]=max(dp[i-1][j-1]+dir[a[i]][b[j]],max(dp[i-1][j]+dir[a[i]][4],dp[i][j-1]+dir[b[j]][4]));如果无法理解,请参考算法导论关于DP的章节。注意初始化。 1 #include <iostream> 2 #include <cstring> 3 #include <cmath> 4 us 阅读全文
posted @ 2012-10-22 01:21 symons 阅读(198) 评论(0) 推荐(0)

摘要: 本题的意思和我们学校OJ上的编辑距离是一样的,只不过是一个中文,一个英文罢了。有3中操作,删除,插入,替换。属于字符串匹配的DP问题。如果a[i]==b[j],dp[i][j]=dp[i-1][j-1];否则的话,状态转移方程就是dp[i][j]=min(dp[i-1][j]+1,min(dp[i][j-1]+1,dp[i-1][j-1]+1));另外写的时候一定要注意初始化的问题。-------------------------------------------------#include <iostream>#include <cstring>#include 阅读全文
posted @ 2012-10-22 01:14 symons 阅读(193) 评论(0) 推荐(0)