2013年8月12日
摘要: 题目链接。题目大意:给定一定的数量的小于关系:1.如果发现环,输出从前几次就可以确定出现环2.如果能够确定唯一序列,输出。3.如果通过全部关系,还不能确定序列,则输出不能确定.分析:个人感觉难点在于判环上。1.如果每次都只能找到1个入度为0的点,并能确定序列,则该序列即为答案。2.如果每次查找时,发现两个及其以上的入度为0的点,则表明一定不能确定唯一序列(即存在环或者是不能确定)。如果可以确定一个任意序列,即表明还需要更多关系。如果继续查找下去,找不到入度为0的点,则存在环。 AC代码如下:#include #include #include #include #include using n 阅读全文
posted @ 2013-08-12 23:38 Still_Raining 阅读(312) 评论(0) 推荐(0)
摘要: 题目链接。题目大意:任意两点(点表示字母)可以连线,求使所有点连通,且权值和最小。分析:第一感觉使3维的BFS。但写着写着,发现不对。应当用最小生成树解法。把每个字母(即A,或S)看成一个结点,如果求出来任意两个结点间的权值,则求解即为求最小生成树。通过暴力,对每一个字母进行BFS,求出任意两个结点的距离。然后prim.AC代码如下:#include #include #include #include #include using namespace std;const int maxn = 52;const int INF = (1 Q; memset(vis, 0, sizeof(... 阅读全文
posted @ 2013-08-12 16:49 Still_Raining 阅读(1256) 评论(0) 推荐(0)
摘要: 题目链接。分析:最大的敌人果然不是别人,就是她(英语)。每种代表车型的串,他们的distance就是串中不同字符的个数,要求算出所有串的distance's 最小 sum。AC代码如下:#include #include #include #include using namespace std;const int maxn = 2200;const int INF = (1= d[y]) m = d[x=y]; ans += m; vis[x] = true; for(int y=0; y G[x][y]) d[y] = G[x][y]; } ... 阅读全文
posted @ 2013-08-12 10:31 Still_Raining 阅读(200) 评论(0) 推荐(0)
摘要: 题目链接。分析:dp[i]表示母串从第i位起始的后缀所对应的最少去掉字母数。dp[i] = min(dp[i+res]+res-strlen(pa[j]));其中res 为从第 i 位开始匹配 pa[j] 所需要的长度。以下代码当做指针的练习,研究了几天C,发现C语言功底到底是提升了(虽说算法功底至今还木有)。#include #include #include #include using namespace std;const int maxn = 500;char s[maxn], pa[610][30];int dp[maxn];int match(char *s1, char *s2 阅读全文
posted @ 2013-08-12 09:46 Still_Raining 阅读(237) 评论(0) 推荐(0)