hdu1530 最大团简单题目
题意:
给你一个无向图,让你找到这个图里面的最大团是多少。
思路:
最大图案是NP问题,直接暴力搜索,如果当前的这个点可以加入当前最大团,那么就选择加入或者舍去,如果不能加入,直接舍去,还有一个剪枝就是当前的答案+后面剩余所有点 小于 当前的全局最大 的话直接return.
自己写的跑了 4000+
#include<stdio.h> #define N 60
int map[N][N] ,n;
int now[N] ,Ans; bool ok(int sum ,int to)
{
for(int i = 1 ;i <= sum ;i ++)
if(!map[now[i]][to]) return 0;
return 1;
} void DFS(int to ,int sum ,int node)
{
if(Ans < sum) Ans = sum;
if(sum + n - node < Ans) return;
for(int i = to + 1 ;i <= n ;i ++)
if(ok(sum ,i))
{
now[sum + 1] = i;
DFS(i ,sum + 1 ,node + 1);
}
} int main ()
{
int i ,j;
while(~scanf("%d" ,&n) && n)
{
for(i = 1 ;i <= n ;i ++)
for(j = 1 ;j <= n ;j ++)
scanf("%d" ,&map[i][j]);
Ans = 0;
for(i = 1 ;i <= n ;i ++)
{
now[1] = i;
DFS(i ,1 ,1);
}
printf("%d\n" ,Ans);
}
return 0;
}
后来学了dp优化后的 900+
#include<stdio.h> #define N 60
int map[N][N];
int dp[N] ,now[N];
int n ,Ans; void DFS(int x ,int sum)
{
if(sum > Ans) Ans = sum; int able = 0;
int tnow[N];
for(int i = x + 1 ;i <= n ;i ++)
{
tnow[i] = now[i];
if(now[i]) able ++;
}
if(able + sum <= Ans) return; for(int i = x + 1 ;i <= n ;i ++)
{
if(!tnow[i]) continue;
if(dp[i] + sum <= Ans) continue;
for(int j = x + 1 ;j <= n ;j ++)
now[j] = tnow[j] & map[i][j];
DFS(i ,sum + 1);
}
} int Max_Tuan()
{
Ans = dp[n] = 1;
for(int i = n - 1 ;i >= 1 ;i --)
{
for(int j = 1 ;j <= n ;j ++)
now[j] = map[i][j];
DFS(i ,1);
dp[i] = Ans;
}
return Ans;
} int main ()
{
int i ,j;
while(~scanf("%d" ,&n) && n)
{
for(i = 1 ;i <= n ;i ++)
for(j = 1 ;j <= n ;j ++)
scanf("%d" ,&map[i][j]);
printf("%d\n" ,Max_Tuan());
}
return 0;
}
hdu1530 最大团简单题目的更多相关文章
- HDOJ(HDU) 1994 利息计算(简单题目)
Problem Description 为自行解决学费,chx勤工俭学收入10000元以1年定期存入银行,年利率为3.7% .利率 按年计算,表示100元存1年的利息为3.7元.实际上有时提前有时推迟 ...
- leetcode简单题目两道(2)
Problem Given an integer, write a function to determine if it is a power of three. Follow up: Could ...
- HDU1530 最大团 模板
Maximum Clique Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- DP 简单题目练习
ZOJ 1234 这道题目我表示也还不是特别能理解....还是太菜了T T 从后往前思考,因为只要后面有多的数在,那么C肯定是存在的,只要考虑是否把前两个数加在一起作为badness值这样两种情况来考 ...
- hdu poj KMP简单题目总结
hdu 3336 题意:输入一个字符串求每个前缀在串中出现的次数和 sol:只要稍微理解下next 数组的含义就知道只要把每个有意义的next值得个数加起来即可 PS:网上有dp解法orz,dp[i] ...
- Leetcode题解 - 树、DFS部分简单题目代码+思路(700、671、653、965、547、473、46)
700. 二叉搜索树中的搜索 - 树 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 NULL. 思路: 二 ...
- Leetcode题解 - 树部分简单题目代码+思路(105、106、109、112、897、257、872、226、235、129)
树的题目中递归用的比较多(但是递归是真难弄 我
- leetcode简单题目两道(5)
Problem Given an integer (signed bits), write a function to check whether it . Example: Given num = ...
- leetcode简单题目两道(4)
心情还是有问题,保持每日更新,只能如此了. Problem Given a binary tree, return the level order traversal of its nodes' va ...
随机推荐
- LeetCode-二叉搜索树的第k大节点
二叉搜索树的第k大节点 LeetCode-面试题54 需要充分了解二叉搜索树的性质. 利用中序遍历的思想,采用相反的思想:先遍历右节点再遍历左节点. /** * 给定一棵二叉搜索树,请找出其中第k大的 ...
- POJ1458 Common Subsequence
题目链接:http://poj.org/problem?id=1458 分析:最大公共子序列模板 1 #include<iostream> 2 #include<sstream> ...
- 2020年12月-第02阶段-前端基础-CSS Day05
CSS Day05 1. 学成在线页面制作 理解 能够说写单页面我们基本的流程 能说出常见的css初始化语句 能说出我们CSS属性书写顺序 应用 能利用ps切图 能引入外部样式表 能把psd文件转换为 ...
- xss靶场大通关(持续更新ing)
xss秘籍第一式(常弹) (1)进入自己搭建的靶场,发现有get请求,参数为name,可进行输入,并会将输入的内容显示于网页页面 (2)使用xss的payload进行通关: http://127. ...
- 24端口以太网FPGA的开发板
板卡架构 板载FPGA(K7-325T)处理24端口10/100/1000M以太网数据: FPGA外挂4Gbit的DDR3颗粒,最大支持800MHz: 板载CPU进行系统配置.管理,并与客户端软件通信 ...
- P3160 [CQOI2012]局部极小值 题解(状压DP+容斥)
题目链接 P3160 [CQOI2012]局部极小值 双倍经验,双倍快乐 解题思路 存下来每个坑(极小值点)的位置,以这个序号进行状态压缩. 显然,\(4*7\)的数据范围让极小值点在8个以内(以下示 ...
- HashMap源码阅读(小白的java进阶)
OverView 构造方法 //构造方法 public HashMap(int initialCapacity, float loadFactor) { if (initialCapacity < ...
- 程序员必须搞懂的20个Java类库和API
本文总结了日志.JSON解析.单测.XML解析.字节码处理.数据库连接池.集合类.邮件.加密.嵌入式SQL数据库.JDBC故障诊断以及序列化等20个方面的常用类库.都是你日常开发经常可能要用到的,现在 ...
- CSS轮廓和圆角
1 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <meta charset=" ...
- 时间同步chrony,最全最细
时间同步服务 多主机协作工作时,各个主机的时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协 议,日志,集群等, 利用NTP(Network Time Protocol) 协议使网络中的各 ...