摘要: /*贪心: 当为6*6时,只能用一个盒子装 当为5*5时,可以每一个多装11个1*1的盒子 当为4*4时,可以先装2*2的盒子,每一个4*4的可以装5个2*2,若2*2不够,则装1*1的 当为3*3时,每一个可以装4个3*3,若最后不足4个,先用2*2的装,空余的位置用1*1装 当为2*2时,每一个可以装9个2*2的,最后有剩余装1*1的 若最后还有1*1的,每36个可以装一盒,多的算多一盒*/#include <iostream>#include <cstdio>using namespace std;#define X 7int a[X];int main(){ f 阅读全文
posted @ 2012-04-07 21:09 yejinru 阅读(156) 评论(0) 推荐(0) 编辑
摘要: /*题目: 象棋中的车在象棋盘上可以放置的最大数目(若没有挡板的话,在同一行或同一列的车 可以相互攻击,问的是所有的车可以和平地放置的最大数目)分析: 方法一: 可以通过暴搜得到答案(题目数据较小) 方法二: 可以通过构造二分图的方法来做,以下主要分析二分图的解法方法: 我们将每一行,每一列被墙隔开,且包含空地的连续区域称作“块”。显然,在一个块之中, 最多只能放一个车。我们把这些块编上号。 同样,把竖直方向的块也编上号。 把每个横向块看作X部的点,竖向块看作Y部的点,若两个块有公共的空地,则在它们之间连边。 于是,问题转化成这样的一个二部图: .X.. .... XX.. .... 我们可以 阅读全文
posted @ 2012-04-07 19:33 yejinru 阅读(243) 评论(0) 推荐(2) 编辑
摘要: /*题目: 当狼与猪相邻时,狼要吃猪,若狼吃掉一头猪,他不会再吃另一头猪,问狼可以吃掉的猪的最大数目分析: 狼与猪构成二分图,第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) 编辑