上一页 1 2 3 4 5 6 7 ··· 11 下一页

2013年10月9日

摘要: 水题 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define mod 10007 7 using namespace std; 8 char str[1002]; int dp[1002][1002],cas; 9 void work( )10 {11 int len = strlen( str );12 memset( dp,0,sizeof(dp) );13 for( int i = 0; i < len; i++ )dp[i][i] = 1;14 for( int i = 1; i ... 阅读全文
posted @ 2013-10-09 20:44 浪舟 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 最长公共子序列问题:给定2个字符串,求其最长公共子串。如abcde和dbada的最长公共字串为bd。动态规划:dp[i][j]表示A串前i个和B串前j个的最长公共子串的长度。则若A[i] == B[j] , dp[i][j] = dp[i-1][j-1] + 1;否则 dp[i][j] = max(dp[i-1][j],dp[i][j-1]);时间复杂度O(N*M)。dp[i][j]仅在A[i]==B[j]处才增加,对于不相等的地方对最终值是没有影响的。故枚举相等点处可以对其进行优化。则对于dp[i][j](这里只计算A[i]==B[j]的i和j),取最大的dp[p][q],满足(p a[j] 阅读全文
posted @ 2013-10-09 10:56 浪舟 阅读(231) 评论(0) 推荐(0) 编辑

2013年10月8日

摘要: 这个题 用一维 为什么错了; 因为 用一维 dp 方程肯定也是一维;但是有没有想,第 i 个字符更新了 j 位置的最优结果,然后 k 字符又一次更新了 j 位置的最优值,然后 我的结果是 i 字符更新的结果; 但被覆盖了 所以错了; 不如用一个二维数组 表示 地 i 个字符放进去匹配另一个字符的 j 位置的最优值是由那个位置传递过来的; 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 9 vectorvv;10 int num1[555],num2[555].. 阅读全文
posted @ 2013-10-08 23:48 浪舟 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 链接 http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11404&courseid=0求 最长回文个数 并且输出 ; 虽然 O(n^2) 可过; 但 O(n) 是王道看这个博客 http://www.cnblogs.com/wulangzhou/p/3449428.html 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define maxn 111000 7 using namespace std; 8 inline int m 阅读全文
posted @ 2013-10-08 23:42 浪舟 阅读(212) 评论(0) 推荐(0) 编辑

2013年10月6日

摘要: 最长公共上升子序列 LCIS 看这个博客 http://www.cnblogs.com/nuoyan2010/archive/2012/10/17/2728289.html 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 int num1[505],num2[505],dp[505][505]; 9 int main( )10 {11 int N,M,T; scanf("%d",&T);12 while( T-- )13 {14 sca... 阅读全文
posted @ 2013-10-06 17:27 浪舟 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 裸的 并查集 + 分组背包; 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 9 vectorvv[1002];10 vectorss[1002];11 int f[1002],N,M,W,wi[1002],pi[1002],dp[1012];12 int find( int x ){13 if( x != f[x] )return f[x] = find(f[x]);14 return x;15 }16 void inint( ){17 ... 阅读全文
posted @ 2013-10-06 00:19 浪舟 阅读(161) 评论(0) 推荐(0) 编辑

2013年10月3日

摘要: 好像是模板题 当作练习题 不错; 要求任意两点之间的距离。可以假设一个根节点,然后所有点到根节点的距离,然后求出任意两点多公共祖先; 距离就变成了dis[u]+dis[v] - 2*dis[ lca(u,v) ] 非常好的题目 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 struct date{ 9 int v,val,next;10 }edge[112345];11 int N,M,total,head[112345],dis[112345];12 void ad... 阅读全文
posted @ 2013-10-03 19:51 浪舟 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 直接模拟 如果后一位比前一位小,那就一直 向前 pop()掉 维护他单调递增; 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 9 char str[1123]; int res[1123],num;10 int main( )11 {12 while( scanf("%s%d",&str,&num) != EOF )13 {14 int len = strlen( str ); int k = 0;15 fo... 阅读全文
posted @ 2013-10-03 17:52 浪舟 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 简单的 RMQ; 先预处理得到 所有 节点的 公共祖先 和 dfs 得到所有节点的父亲节点; 然后 询问时,从自己出发向上找父亲, 然后 得到所有的节点;排序一下不知道 这题这样也能过;为什么不会超时啊???????????; 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 const int maxn = 80010; 9 struct date{ 10 int v,next; 11 }edge[maxnvv; 50 bool cmp(... 阅读全文
posted @ 2013-10-03 15:55 浪舟 阅读(241) 评论(0) 推荐(0) 编辑

2013年9月30日

摘要: 这个题 任意一个数,他的幂只要不是质数则可以分解成两个数的乘 判断有没有溺出 i×i 则用最大的那个数 Max/i 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 typedef unsigned long long ll; 9 const ll Max = 0xffffffffffffffffLL;//18446744073709551615;10 sets;11 bool work( int num ){12 for( int i = 2; i ::iterato... 阅读全文
posted @ 2013-09-30 19:51 浪舟 阅读(342) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 11 下一页

导航