上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 30 下一页
摘要: /*题目: 当狼与猪相邻时,狼要吃猪,若狼吃掉一头猪,他不会再吃另一头猪,问狼可以吃掉的猪的最大数目分析: 狼与猪构成二分图,第i头狼能吃掉第j头猪,则g[i][j] = true即可建图,可以先预处理每一头猪和狼 的序号,然后再建图*/#include<cstdio>#include<cstring>#define X 105#define M 11char ch[M][M];intym[X],cal[2][M][M],n,m,nw,np;//int xm[X];booluse[X],g[X][X];bool dfs(int u){ for(int v=1;v< 阅读全文
posted @ 2012-04-07 16:04 yejinru 阅读(197) 评论(0) 推荐(0) 编辑
摘要: /*题目: 当一个洋娃娃的长宽高都比另一个大时,小的那个可以被套进去,问在最外面的洋娃娃的 最小个数分析: 求最大独立集,用娃娃总数-最大匹配即可,用两层循环先建图,每当娃娃i长宽高都比j小时, 则g[i][j] =true建图即可,开始时我竟然先对它进行排序,后来才发现是不用的。。。直接 两层循环再比较即可建图。求最大匹配就是纯粹的hungy算法*/#include<iostream>#include<cstring>#include<cstdio>using namespacestd;#define X 502intxm[X],ym[X],n,m;boo 阅读全文
posted @ 2012-04-07 16:03 yejinru 阅读(404) 评论(0) 推荐(0) 编辑
摘要: /*题目: 每头奶牛喜欢在不同的地方产奶,每个地方只能容纳一头奶牛,问最多的产奶的地方分析: 在产奶地与奶牛之间建立匹配,然后用hungry算法做,比如奶牛a喜欢在q地产奶,则 g[a][q] = true,建图即可*/#include<iostream>#include<cstdio>#include<cstring>using namespacestd;#define X 202intxm[X],ym[X],n,m;boolg[X][X],use[X];int dfs(int u){ for(int v=1;v<=m;v++) if(g[u][v] 阅读全文
posted @ 2012-04-07 16:02 yejinru 阅读(165) 评论(0) 推荐(0) 编辑
摘要: /*题目: 值班问题,给出所有人的空余时间,问能不能够在每一个时间里安排一个人值班分析: 二分匹配问题,按人与他的空余时间连线构图,然后就是hungry算法了,简单*/#include<iostream>#include<cstring>#include<cstdio>using namespacestd;#define X 22boolg[X][X],use[X];intxm[X],ym[X],k,p;bool dfs(int u){ for(int v=0;v<k;v++) if(g[u][v]&&!use[v]) { use[v] 阅读全文
posted @ 2012-04-07 16:00 yejinru 阅读(201) 评论(0) 推荐(0) 编辑
摘要: /*题目: 哈工大推出新的宿舍分配方案,当两人对A B题有相同答案的人可以分在A类宿舍, 对C D题有相同答案的人可以分在B类宿舍,每一间的宿舍人数没有限制的话,问可 以最少要分配多少间宿舍才能分好所有学生分析: 每一个学生都可以分配在A类宿舍i,或者B类宿舍j,因此,g[i][j] = true,由此可以 构造一个二分图,用hungry算法做 由于输入的数据比较大,若用两层循环判断的话,会超时,所以可以先排序,然后再判断 与前面的一不一样,若一样则置g[i][j] = true,i 和 j的值需要先处理好,具体看代码*/#include<iostream>#include< 阅读全文
posted @ 2012-04-07 15:56 yejinru 阅读(183) 评论(0) 推荐(1) 编辑
摘要: /*题目:下列区间可以在数轴上分成最少多少个区间块分析:这题主要是贪心的做法,对输入的区间按照左边的值进行排序后,然后开始向后枚举每个后面的区间的前边的值是否小于等于起初的最大能到右面的最大值,符合的话,在更新一下起初的能到达右面的最大距离,比如2-54-8的话,由于第一个的右值为5,而枚举到第二个区间时,4<5,而8比5大,所以又可以到达8,更新一下,具体看代码*/#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>usingnamespacestd; 阅读全文
posted @ 2012-04-06 15:42 yejinru 阅读(211) 评论(0) 推荐(0) 编辑
摘要: /*一般我们的做法都是正向思维,即先对横坐标排好序,再枚举横坐标的整点,然后贪心做,其实这样做是很费力的。可以逆向思维考虑一下: 最多只有1000的点,我们可以先预处理完以该点为圆心,半径为d的圆与横坐标的左右交点 (当然还可能只有1个,或者没有),然后分别储存到结构体的两个关键字中,然后尽量再枚举 后面的点的区间与前面的点的区间(两个关键字构成的区间)有交集(贪心,因为事先排好序), 再向后面延展的同时,使得雷达的数量最小化,直到遇到没有交集的点为止 (我的文字可能不清晰,具体看代码)*/#include <cstdio>#include <iostream>#inc 阅读全文
posted @ 2012-04-05 21:18 yejinru 阅读(162) 评论(0) 推荐(0) 编辑
摘要: /*题目: 很裸的次小生成树题,要求先给出最小生成树的值,若有不连通的输出-1, 接着需要输出次小生成树的值分析: 可以选择prim或kruskal算法做,我的做法是用prim做的,具体看代码注释*/#include <iostream>#include <cstring>#include <cstdio>using namespace std;#define X 503#define INF 10000000int path[X][X],map[X][X],dis[X],pre[X],n,m;bool use[X],visit[X][X];int prim 阅读全文
posted @ 2012-03-31 18:24 yejinru 阅读(190) 评论(0) 推荐(0) 编辑
摘要: /*有向图的传递闭包问题,只要顶点的入度或出度大于n/2,即可判断它不符合中间点,即答案加一,而求它的入度或出度的话,可以用有向图的传递闭包floyd算法来做,时间复杂度为O(n^3)*/#include <iostream>#include <cstring>#include <cstdio>using namespace std;#define X 100int map[X][X],n,m;void floyd(){ for(int k=1;k<=n;k++) //floyd算法求传递闭包 for(int i=1;i<=n;i++) for( 阅读全文
posted @ 2012-03-29 15:53 yejinru 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 1049 1050 1057 1062 1063 1064 1070 1073 1075 1082 1083 1084 1088 1106 1107 1113 1117 1119 1128 1129 1144 1148 1157 1161 1170 1172 1177 1197 1200 1201 1202 1205 1209 1212(大数取模) 1216(链表)1218 1219 1225 1228 阅读全文
posted @ 2012-03-24 22:21 yejinru 阅读(202) 评论(0) 推荐(0) 编辑
上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 30 下一页