摘要: 开始看到这道题知道要用dp,但这个六边形的确很恶心,每次坐标的偏移量无法用二维数组完整表现出来,后经过看多方题解,明白了可以取八个方向中的六个,解决了构图的问题,至于状态转移是很明显的。dp[s][i][j]表示经过s步到达坐标为[i][j]的位置的路径数: 则dp[s][i][j] = dp[s-1][i-1][j-1]+dp[s-1][i][j-1]+dp[s-1][i+1][j]+dp[s-1][i+1][j+1]+dp[s-1][i][j+1]+d[s-1][i-1][j];然后进行扫描就可得到dp[n][sta_r][sta_c]就是为每次要求的答案(sta_r,sta_c为假设的. 阅读全文
posted @ 2011-03-29 17:57 c++fans 阅读(454) 评论(0) 推荐(1) 编辑
摘要: 掌握无向图欧拉回路存在的充要条件:连通且所有点的度数为偶数。这里采用并查集判断是否连通,只要把每条边的两个顶点合并,最后判断是否有顶点不在这个集合里就可知是否连通。在并查集合并时没有判断要合并的顶点是否已经在一个集合中,导致产生集聚,多次TLE,自己真的很水啊。View Code #include <iostream>#include <cstring>using namespace std;const int MAX = 1005;int n,m,degree[MAX],root[MAX];void makeSet(){ for(int i = 1;i <= n 阅读全文
posted @ 2011-03-26 09:22 c++fans 阅读(611) 评论(0) 推荐(0) 编辑
摘要: 最小生成树的水题,直接上代码了。View Code // source code of submission 689439, Zhongshan University Online Judge System#include <iostream>#include <vector>#include <algorithm>using namespace std;struct Edge{ int u,v,length; Edge(int uu,int vv,int ll): u(uu),v(vv),length(ll) {}};vector<Edge> 阅读全文
posted @ 2011-03-24 22:46 c++fans 阅读(563) 评论(0) 推荐(0) 编辑
摘要: 本文来自: 免费资源收集网(www.freezq.cn) 详细出处参考:http://www.freezq.cn/article/380.htmjava中的split函数和js中的split函数不一样。Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回字符串数组,下面是string.split的用法实例及注意事项:java.lang.string.splitsplit 方法将一个字符串分割为子字符串,然后将结果作为字符串数组返回。stringObj.split([separator,[limit]]) 免费资源收集网(http://www.freezq.cn)stri 阅读全文
posted @ 2011-03-18 19:20 c++fans 阅读(67644) 评论(0) 推荐(2) 编辑
摘要: 题意是老师要带学生出游,但有怕学生会成为一对。给出学生们不会成为一对的条件:1身高相差超过402性别相同3音乐风格不一样4最喜欢的运动一样然后给出每个学生的资料,问能带多少学生出去,使得这些学生不会成为一对。构图时先求出会成为一对的对数ans,然后总数n-ans/2就是答案。#include <iostream>#include <cstring>#include <string>using namespace std;const int MAX = 505;struct student{ int h; char sex; string style,spor 阅读全文
posted @ 2011-03-16 10:29 c++fans 阅读(206) 评论(0) 推荐(0) 编辑
摘要: View Code //数据小,dfs+回溯,能够水过#include <iostream>#include <cstring>#include <queue>using namespace std;const int MAX = 10;char map[MAX][MAX];int n,ans;bool can(int x,int y){ int i,j; for(i = x+1;i < n;++i) { if(map[i][y] == 'Z') return false; if(map[i][y] == 'X') br 阅读全文
posted @ 2011-03-13 14:03 c++fans 阅读(186) 评论(0) 推荐(0) 编辑
摘要: View Code 题意大概是学校有多门课。没门课可能会在一个星期的每一天i(1<=i<=7)的第j(1<=j<=12)节课进行。求一个选课方案使得能选的课最多。构造二分图,M={课程},N={课程举行的时间},然后构造M到N得二分图。这里将时间(i,j)映射为一个整数(i-1)*12+j用于构图。然后用匈牙利算法进行匹配就行了。#include <iostream>#include <cstring>using namespace std;int map[305][86],match[86],course[10][15 ];bool vis[8 阅读全文
posted @ 2011-03-05 23:55 c++fans 阅读(181) 评论(0) 推荐(0) 编辑
摘要: View Code 工作人员集合M和工作N是二分图的两个部分,工作人员i对工作j的满意度k作为边<i,j>的权值,要求一个令所有工作人员满意度最大的匹配就是求这个二分图的带权最大匹配。这里用到KM算法,由于不是很懂KM算法,所以要感谢http://www.cnblogs.com/north_dragon/archive/2010/06/03/1750789.html这位大牛的模板。在一年中最较特殊的2月的最后一天抓住AC的机会。#include <iostream>#include <cstring>#include <cstdio>using 阅读全文
posted @ 2011-02-28 23:26 c++fans 阅读(376) 评论(0) 推荐(0) 编辑
摘要: View Code 设置超级源点s(此处标号为m的房间就是源点),如果房间k有入侵者(intruder),则存在一条有s指向k的弧,且容量为c(s,k)=INF;然后是处理由门联通的两个房间的关系了。(1)如果房间i和j有门且cp在i,则c(i,j)=INF,c(j,i)=1;(2)如果房间i和j有门且cp在j,则c(i,j)=1,c(j,i)=INF;超级汇点t就是要保护的房间号码。计算从s到t的最大流ans.若ans>=INF,说明无法保护,否则ans为需要锁上的门的最小数量。#include <iostream>#include <cstring>#incl 阅读全文
posted @ 2011-02-27 10:59 c++fans 阅读(527) 评论(0) 推荐(0) 编辑
摘要: 赤裸裸的Ford-Fulkerson算法求最大流。#include <iostream>#include <cstring>#include <queue>using namespace std;const int MAX = 1003;int map[MAX][MAX],pre[MAX],n,m,ans;bool vis[MAX];int Maxflow() // 采用BFS找增广路径{ while(true) { queue<int> que; memset(pre,0,sizeof(pre)); memset(vis,0,sizeof(vi 阅读全文
posted @ 2011-02-24 19:26 c++fans 阅读(623) 评论(0) 推荐(0) 编辑