题意:

      给你一个无向图,让你找到这个图里面的最大团是多少。

思路:

      最大图案是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 最大团简单题目的更多相关文章

  1. HDOJ(HDU) 1994 利息计算(简单题目)

    Problem Description 为自行解决学费,chx勤工俭学收入10000元以1年定期存入银行,年利率为3.7% .利率 按年计算,表示100元存1年的利息为3.7元.实际上有时提前有时推迟 ...

  2. leetcode简单题目两道(2)

    Problem Given an integer, write a function to determine if it is a power of three. Follow up: Could ...

  3. HDU1530 最大团 模板

    Maximum Clique Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. DP 简单题目练习

    ZOJ 1234 这道题目我表示也还不是特别能理解....还是太菜了T T 从后往前思考,因为只要后面有多的数在,那么C肯定是存在的,只要考虑是否把前两个数加在一起作为badness值这样两种情况来考 ...

  5. hdu poj KMP简单题目总结

    hdu 3336 题意:输入一个字符串求每个前缀在串中出现的次数和 sol:只要稍微理解下next 数组的含义就知道只要把每个有意义的next值得个数加起来即可 PS:网上有dp解法orz,dp[i] ...

  6. Leetcode题解 - 树、DFS部分简单题目代码+思路(700、671、653、965、547、473、46)

    700. 二叉搜索树中的搜索 - 树 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 NULL. 思路: 二 ...

  7. Leetcode题解 - 树部分简单题目代码+思路(105、106、109、112、897、257、872、226、235、129)

    树的题目中递归用的比较多(但是递归是真难弄 我

  8. leetcode简单题目两道(5)

    Problem Given an integer (signed bits), write a function to check whether it . Example: Given num = ...

  9. leetcode简单题目两道(4)

    心情还是有问题,保持每日更新,只能如此了. Problem Given a binary tree, return the level order traversal of its nodes' va ...

随机推荐

  1. CCF(除法):线段树区间修改(50分)+线段树点修改(100分)+线段树(100分)

    除法 201709-5 这道题有很多种方法来做,最常用的就是线段树和树状数组. 如果使用线段树来做,就会想到区间修改的update函数.但是这里可能会涉及到v是1或者a[j]是0的情况,所以用这种方法 ...

  2. Mybatis系列全解(三):Mybatis简单CRUD使用介绍

    封面:洛小汐 作者:潘潘 在理解中执行,在执行中理解,学习技术也循此道. 前言 上一篇文章 <Mybatis系列全解(二):Mybatis简介与环境搭建> ,我们对 Mybatis 做了初 ...

  3. MongoDB4.2 副本集扫盲说明

    说明: 在扫盲MongoDB相关的一些知识的时候,顺手做下笔记.本文将说明副本集相关的内容.在比较早之前已经对这些有过说明,可以看MongoDB 副本集的原理.搭建.应用.MongoDB中的副本集是一 ...

  4. centos /bin /sbin /usr/bin /usr/sbin 目录的说明

    在linux下我们经常用到的四个应用程序的目录是/bin./sbin./usr/bin./usr/sbin .而四者存放的文件一般如下:    bin目录:  bin为binary的简写主要放置一些系 ...

  5. Python编程中可能经常用到的函数

    1.os.walk() 一般用法为 import os ph=r'D:\temp\build' for root,dirs,files in os.walk(ph): print(root,dirs, ...

  6. drozer使用总结

    adb forward tcp:31415 tcp:31415 drozer console connect run app.package.list -f baidu      查看包名 run a ...

  7. JVM之基础概念(运行时数据区域、TLAB、逃逸分析、分层编译)

    运行时数据区域 JDK8 之前的内存布局 JDK8 之后的 JVM 内存布局 JDK8 之前,Hotspot 中方法区的实现是永久代(Perm),JDK8 开始使用元空间(Metaspace),以前永 ...

  8. (二)SpringBoot启动过程的分析-环境信息准备

    -- 以下内容均基于2.1.8.RELEASE版本 由上一篇SpringBoot基本启动过程的分析可以发现在run方法内部启动SpringBoot应用时采用多个步骤来实现,本文记录启动的第二个环节:环 ...

  9. ARFoundation - touch point坐标点测试

    ARFoundation - touch point坐标点测试 本文目的是为了看一下Android手机上touch之后,对应的点相关信息,主要包括: 点的屏幕坐标,以左下角为原点: 点的viewpor ...

  10. LiteOS内核源码分析:任务LOS_Schedule

    摘要:调度,Schedule也称为Dispatch,是操作系统的一个重要模块,它负责选择系统要处理的下一个任务.调度模块需要协调处于就绪状态的任务对资源的竞争,按优先级策略从就绪队列中获取高优先级的任 ...