zoukankan      html  css  js  c++  java
  • CSUOJ 1973 给自己出题的小X DFS

    Description

    小X学习了dfs,为了练习搜索,开始给自己出题玩。
    玩着玩着,一会把自己难住了,一会又被自己难倒了,真是有趣诶!
    小X出的题:
    现在有N个不同的正整数,求它们可以组成多少个这样的集合,满足:

    • 集合内的元素数量S>1
    • 集合内任意两个数的差的绝对值都大于集合内的元素数量。

    Input

    第一行,一个正整数T(T<=20)表示数据组数。

    对于每组数据,有两行。第一行为一个正整数N(3≤N≤25),第二行为N个用空格隔开的正整数xi(xi≤200)。

    Output

    对于每组数据,输出一行一个整数表示题中所描述的集合的个数。

    Sample Input

    1
    5
    2 3 5 8 1
    

    Sample Output

    6

    Hint

    {5,8},{1,5},{1,8},{2,5},{2,8},{3,8}.

    用dfs搜索,依次枚举第i个数,当准备加入下一个数时,需要检查当前的最小间隔是否大于当前的集合数量+1,在dfs时,传递一个最小值即可进行判断。

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    #define INF 0x3fffffff
    int a[50];
    int ans, n;
    void dfs(int pos,int dis,int gap)//dis表示数组中数字个数 gap表示任意两数之差的最小值 pos表示加入的数的位置
    {
    	if (pos == n - 1 || gap <= dis + 2)return;
    	for (int i = pos+1; i < n; i++)
    	{
    		if (a[i] - a[pos]>dis + 2)
    		{
    			dfs(i, dis + 1, min(gap, a[i] - a[pos]));
    			ans++;
    		}
    	}
    }
    int main()
    {
    	int T;
    	while (cin >> T)
    	{
    		while (T--)
    		{
    			cin >> n;
    			for (int i = 0; i < n; i++)
    			{
    				cin >> a[i];
    			}
    			ans = 0;
    			sort(a, a + n);
    			for (int i = 0; i < n; i++)
    				dfs(i, 0,INF);
    			printf("%d
    ", ans);
    		}
    	}
    	return 0;
    }
    /**********************************************************************
    	Problem: 1973
    	User: leo6033
    	Language: C++
    	Result: AC
    	Time:84 ms
    	Memory:2024 kb
    **********************************************************************/
    

  • 相关阅读:
    常用的ORM框架与自动化映射工具
    数据持久化
    char、nchar、varchar、nvarchar 的区别
    MS SqlServer还原数据库,出现媒体簇的结构不正确
    根据字段查询所有表名
    java中package指什么
    MybatisGenerator生成的mapper 少了识别主键的方法 byPrimaryKey()
    Sql Server触发器的使用
    WebService生成XML文档时出错。不应是类型XXXX。使用XmlInclude或SoapInclude属性静态指定非已知的类型。
    sqlserver记录去重
  • 原文地址:https://www.cnblogs.com/csu-lmw/p/9124432.html
Copyright © 2011-2022 走看看