[HDU]1530 Maximum Clique 最大团问题[模板]
来源:互联网 发布:c 编程游戏写法 编辑:程序博客网 时间:2024/06/12 01:38
题目: 给出一个无向图, 求出其中的最大团.
题解: 最大团是一个NP完全问题...这道题爆搜+优化就能过. 爆搜是枚举所有子图(当然要是团). 优化是加入一个记忆化搜索的数组f, f[i]表示i-n这些点中能组成的最大团点数. 然后记忆化搜的时候如果当前枚举到i时(还没选i)的最大团点数 + f[i]小于全局最大团(已求得的最大团)的话, 就continue. 还有就是如果当前能选的点+已有最大团 < 全局最大团的话也return.
#include<stdio.h>#define N 55int n, ans, mp[N][N], f[N], now[N];void dfs(int u, int sum){if(sum > ans) ans = sum;int able = 0, tnow[N];for(int i = u + 1; i <= n; ++i){tnow[i] = now[i];if(now[i]) able++;}if(sum + able <= ans) return;for(int i = u + 1; i <= n; ++i){if(!tnow[i]) continue;if(f[i] + sum <= ans) continue;for(int j = u + 1; j <= n; ++j)now[j] = tnow[j] & mp[i][j];dfs(i, sum + 1);}}inline int Max_Clique(){ans = f[n] = 1;for(int i = n - 1; i; --i){for(int j = 1; j <= n; ++j)now[j] = mp[i][j];dfs(i, 1);f[i] = ans;}return ans;}int main(){while(~scanf("%d", &n) && n){for(int i = 1; i <= n; ++i)for(int j = 1; j <= n; ++j)scanf("%d", &mp[i][j]);printf("%d\n", Max_Clique());}}
阅读全文
0 0
- [HDU]1530 Maximum Clique 最大团问题[模板]
- HDU 1530 Maximum Clique 简单的最大团模板题
- 1530 Maximum Clique 最大团(模板)
- HDU ACM 1530 Maximum Clique->最大团
- [HDU 1530] Maximum Clique 最大团
- HDU 1530 Maximum Clique 最大团
- hdu-1530-Maximum Clique-找最大团
- HDU 1530 Maximum Clique 图论最大团问题
- Maximum Clique最大团问题
- HDOJ 1530 Maximum Clique(最大团模板题)
- hdu 1530 Maximum Clique(最大团模版)
- hdu 1530 Maximum Clique——最大团
- hdoj 1530 Maximum Clique 【最大团】
- hdoj--1530--Maximum Clique(最大团)
- hdu 1530 Maximum Clique_最大团模板
- Maximum Clique-最大团dfs
- 【最大团】【HDU1530】【Maximum Clique】
- hdu1530 Maximum Clique(求最大团模板题)
- python中使用多进程和单进程分别拷贝大量文件效率对比
- Android NDK 编程常见错误收集
- 拓扑排序模板--hdu2647
- GeekBand笔记-《C++设计模式》第二周
- c++普通继承、虚继承、虚函数对sizeof的影响
- [HDU]1530 Maximum Clique 最大团问题[模板]
- (网易2018校招笔试)[编程题] 字符串碎片
- android 性能调优
- Java文件操作
- vin码识别车架号识别介绍
- 图像处理中的神奇的卷积核
- 聚沙成塔--爬虫系列一(环境,开发工具搭建)
- [开源]Android逆向中So模块自动化修复工具+实战一发
- 机器学习——特征工程之主成分分析PCA