摘要:
/*题目: 当狼与猪相邻时,狼要吃猪,若狼吃掉一头猪,他不会再吃另一头猪,问狼可以吃掉的猪的最大数目分析: 狼与猪构成二分图,第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< 阅读全文
摘要:
/*题目: 当一个洋娃娃的长宽高都比另一个大时,小的那个可以被套进去,问在最外面的洋娃娃的 最小个数分析: 求最大独立集,用娃娃总数-最大匹配即可,用两层循环先建图,每当娃娃i长宽高都比j小时, 则g[i][j] =true建图即可,开始时我竟然先对它进行排序,后来才发现是不用的。。。直接 两层循环再比较即可建图。求最大匹配就是纯粹的hungy算法*/#include<iostream>#include<cstring>#include<cstdio>using namespacestd;#define X 502intxm[X],ym[X],n,m;boo 阅读全文
摘要:
/*题目: 每头奶牛喜欢在不同的地方产奶,每个地方只能容纳一头奶牛,问最多的产奶的地方分析: 在产奶地与奶牛之间建立匹配,然后用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] 阅读全文
摘要:
/*题目: 值班问题,给出所有人的空余时间,问能不能够在每一个时间里安排一个人值班分析: 二分匹配问题,按人与他的空余时间连线构图,然后就是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] 阅读全文
摘要:
/*题目: 哈工大推出新的宿舍分配方案,当两人对A B题有相同答案的人可以分在A类宿舍, 对C D题有相同答案的人可以分在B类宿舍,每一间的宿舍人数没有限制的话,问可 以最少要分配多少间宿舍才能分好所有学生分析: 每一个学生都可以分配在A类宿舍i,或者B类宿舍j,因此,g[i][j] = true,由此可以 构造一个二分图,用hungry算法做 由于输入的数据比较大,若用两层循环判断的话,会超时,所以可以先排序,然后再判断 与前面的一不一样,若一样则置g[i][j] = true,i 和 j的值需要先处理好,具体看代码*/#include<iostream>#include< 阅读全文