摘要:
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=15第一次打区间DP,看了很多博客,还是觉得没有太大帮助(脑子比较笨……),后来翻开LRJ的算法艺术与信息学竞赛,终于弄懂了。把心得及书上的区间DP思想记录下来。这道题有几种情况: 我们称刚好... 阅读全文
摘要:
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=542找最长路最短的生成树,可以用kruskal算法求最小生成树,记录可加入的第n-1条边就行了,主要是并查集的应用,按lrj书上并查集的写法,只有一句话就可以表示。代码如下: 1 #include 2 #include 3 #include 4 5 #define N_MAX 1010 6 #define M_MAX 15010 7 #define INF 1000006 8 9 typedef struct Edge10 {11 int u,v,w;1... 阅读全文
摘要:
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1298翻译从百度上找就有这题坑了我俩多小时,在zoj上提交总是WA,从网上找AC代码看,思路都差不多,但是人家的就AC。。找了半天也没找出来,我叫不断尝试找测试数据,也找不到,自己写了几组和AC代码输出都是一样的,但还是WA。坑死我了。。然后我看到poj上也有这个题,就想着把我的代码提交到那上,结果返回的竟然是PE,输出格式问题。。。我把AC代码的输出格式粘到我的代码上,结果……zoj、poj都AC 了……早ZOJ给我返回PE我早就AC了……半天没了……下面是我 阅读全文
摘要:
深搜4^9次就可以了,不用剪枝就可以过,主要还是要模拟钟表的顺时针变化,代码上注释比较清楚。。所以就不多说了。 1 #include 2 #include 3 #include 4 //x数组用于记录九种方法,初始化 5 int x[11][5]={{0,0,0,0,0},{1,2,4,5,0},{1,2,3,0,0},{2,3,5,6,0},{1,4,7,0,0},{2,4,5,6,8},{3,6,9,0,0},{4,5,7,8,0},{7,8,9,0,0},{5,6,8,9,0}}; 6 int p[11],q[11],first; //p数组用于看改变后的钟表位置,q用于记录初始值 7 阅读全文
摘要:
题目链接:http://www.nocow.cn/index.php/Translate:USACO/packrec纠结纠结……终于出来了!IOI的题目果然是不一般,主要还是我的能力比较差,看了好多ACMer的博客看这个题的解题报告,思路是明了了,但是还是不会编码(DFS都没玩熟。。),四个矩形组成的图形只有图示的五种情况,分别讨论就行,最后一种比较复杂,需要再分情况讨论。先搜索位置,还有一点是矩形可以横放和竖放,再搜索横竖,这样就有了5*4!*2^4种情况,情况不多。具体的思路百度别人的。。实在太多种表述方法了,我就是贴出我的C语言代码供大家参考。开始定义变量应该用数组,我没用。。。后来懒得 阅读全文
摘要:
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=115本题求单源最短路,这里有个技巧,因为源点不一,这时我们可以设置一个“超级源点”,即数组下标为0的点,这是只要该点到真正源点的距离为0就可以了。下面是AC代码: 1 #include 2 #include 3 #include 4 #define INF 1000000000 5 int map[1005][1005],flag[1005],dis[1005]; 6 int n; 7 8 int min(int a,int b) {return adis[k]+map[k][j]). 阅读全文
摘要:
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=42一笔画问题是欧拉回路的一个变形,可以一笔画的条件有两个:1、所有顶点必须连通 2、度数为奇数的点有0个或2个,若有两个必然一个是起点,一个是终点。考虑用dfs遍历图,判断是否连通, 结合度数的特点,判断即可。当然本题我的代码用时28MS,但是这个0MS通过的人非常多,可以采用并查集的方法,我的并查集代码用时4MS,看来还是有待提高啊……方法一、DFS 1 #include 2 #include 3 #include 4 int map[1005][1005]; 5 int flag[ 阅读全文
摘要:
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=20首先这题看出是个图的生成树,用pre数组记录下父节点的值,深搜即可,深搜过程中记录父节点位置。由于节点树较多,这里采用C++ STL中的vector容器来存储图。 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 int pre[100005]; 9 vector v[100005];10 11 void dfs(int x)12 {13 for(int i=0;i<v[x]... 阅读全文
摘要:
题目链接:http://poj.org/problem?id=3984本题应用bfs迷宫就行了,主要是要记录路径,pre数组用于记录路径,这里用了C++的STL,比较方便,当然用数组模拟队列也是可以的,看写bfs的习惯了,下面是AC代码 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 int map[7][7]; 9 int pre[30],flag[30];10 int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; //四个方向11 12 bool Isl... 阅读全文
摘要:
题目链接http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=221本来找这个题是要练习dijkstra的。。结果发现这个题权值都是1,可以用BFS很方便,这时又想到了Floyd 用来求每对顶点之间的距离,第一次实现了Floyd算法~!该算法代码结构简单,还没理解就先用了。下面是AC代码~ (p.s:这是我在zoj上提交的第一个代码~~) 1 #include 2 #define INF 1000 3 int map[110][110]; 4 int main() 5 { 6 int n,i,j,k,x,from,to,c... 阅读全文