- 博客(12)
- 收藏
- 关注
原创 最长公共子序列问题 动态规划
给定两个字符串s1s2...sn和t1t1...tn。求出这两个字符串最长的公共子序列输入:abcicbaabdkscab输出:abca定义dp[i][j]为s1…si和t1…tj对应的LCS的长度s1…si+1和t1…tj+1对应的公共子列有三种情况:当si+1= tj+1时,在s1…si和t1…tj
2016-10-08 17:00:16 306
原创 Count the string 动态规划
Problem DescriptionIt is well known that AekdyCoin is good at string problems as well as number theory problems. When given a string s, we can write down all the non-empty prefixes of this string. F
2016-10-08 16:59:12 379
原创 后序遍历
已知一棵二叉树的前序和中序遍历的结果,还原这棵二叉树并输出其后序遍历的结果 前序遍历的递归定义:‘根节点’+‘左子树的前序遍历’+‘右子树的前序遍历’中序遍历的递归定义:‘左子树的中序遍历’+‘根节点’+‘右子树的中序遍历’后序遍历的递归定义:‘左子树的后序遍历’+‘右子树的后序遍历’+‘根节点’定义post_order(str
2016-10-08 16:56:16 595
原创 动态规划中的经典问题
01背包:有N个重量和价值分别为wi,vi的物品。从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。第一步:合理抽象问题定义状态:以dp(i, x)表示已经决定了前i件物品是否选取,当前已经选取的物品的重量总和不超过x时,能够获取的最高的价值的和。dp(n, W)即为所求。我们先考虑dp(N, M)这个问题的最后一个决策——第N件物品是否
2016-10-08 16:55:00 1033
原创 KMP算法
#include <iostream>#include <cstring>#include <cstdio>using namespace std;int main(){ char t[10050],s[1000007]; int c;scanf("%d",&c); while(c--)
2016-10-08 16:53:03 297
原创 Trie树
输入输入的第一行为一个正整数n,表示词典的大小,其后n行,每一行一个单词(不保证是英文单词,也有可能是火星文单词哦),单词由不超过10个的小写英文字母组成,可能存在相同的单词,此时应将其视作不同的单词。接下来的一行为一个正整数m,表示小Hi询问的次数,其后m行,每一行一个字符串,该字符串由不超过10个的小写英文字母组成,表示小Hi的一个询问。 输出对于每一个询问,
2016-10-08 16:50:50 296
原创 最长回文子串
#include <cstdio>#include <cstring>char s[1000002 + 1200];int fast(char *p){ int ans = 1; for (int i = 1; p[i]; i++) { int s = i, e = i, t;
2016-10-08 16:46:34 238
原创 POJ 3660 Cow Contest
N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code better than others. Each cow has a certain constant skill rating that is un
2016-10-08 16:45:04 279
原创 任意两点的最短路问题 Floyd-Warshall算法
和 上两个算法的出发点一样。每个顶点都有可能使得另外两个顶点之间的路程变短。d[i][j] = min(d[i][j], d[i][k] + d[k][j];不断用上式递推就可以实现int d[MAX_V][MAX_V];int V:void warshall-floyd(){ for (int k = 0; k < V; k++)
2016-10-08 16:41:35 468
原创 单源最短路问题 Bellman-Ford算法
d[i] = min{d[j] + (从j到i的边的权值)| e = (j, i) ∈ E}设d[s] = 0, d[i] = INF, 不断使用这条递推关系式更新d的值。图中不存在负圈时这样的更新操作就是有限的,结束后的d就是所求的最短距离。struct edge{ int from, to, cost;};edge es[MAX_E];int
2016-10-08 16:36:53 385
原创 两个极其相似的算法Prim和Dijkstra
记从起点s出发到顶点i的最短距离为d[i]。则下述等式成立:d[i] = min{d[j] + (从j到i的边的权值)|e = (j,i)∈E}Dijkstra算法的基本思路:(1)找到最短距离已经确定的顶点,从它出发更新相邻顶点的最短距离。(2)此后不需要再关心1中的“最短距离已经确定的顶点”。 int cost[MAX_V][M
2016-10-08 16:35:10 828
原创 你为生存做些什么,我不关心
我想知道你的渴求,你是否敢于梦想去满足内心的渴望。你的年龄有多大,我不关心;我想知道,为了爱,为了梦,为了生气勃勃的奇遇,你是否愿意像傻瓜一样冒险。是什么磨圆了你的棱角,我不关心;我想知道,你是否触碰过自己受伤的心,是否因生活辜负过你而变得豁达,抑或因为害怕更多的痛苦而变得消沉和封闭。我想知道,你是否能痛苦着我的痛苦而不是避开它,躲着它。
2016-10-08 16:28:19 684
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人