首页 > 其他分享 >dfs优化剪枝

dfs优化剪枝

时间:2023-07-19 10:35:06浏览次数:42  
标签:剪枝 const int long dfs using 优化

题目链接:D - Peaceful Teams (atcoder.jp)

先看数据范围,肯定是搜索相关

首先想到从第1个人, 第0个队开始的搜索顺序 ,因为这属于内部顺序,所以每次搜索要回溯状态,注意要进行大量剪枝

#include<bits/stdc++.h>

using namespace std;
using ull = unsigned long long;
using ll = long long;
using PII = pair<int,int>;
#define endl "\n"
#define pb push_back
const int N=1e3+10;
const int INF=0x3f3f3f3f;
int a[N], b[N];
int team[N];
int res;
int n, t, m;
void dfs(int u, int tn)
{
    if(u > n)
    {
        if(tn != t) return ;
        
        for(int i = 1; i <= m; i ++)
        {
            if(team[a[i]] == team[b[i]]) return ;//判断是否人所在的队不合法,可行性剪枝
        }
        res ++;
        return ;
    }
    if(n - (u - 1) < t - tn) return ;//因为搜索的是u+1 个人,所以u-1,判断最低剩下的队有人在是否
    
    for(int i = 1; i <= tn; i ++)
    {
        team[u] = i;//先把当前人员装到上个人的队中
        dfs(u + 1, tn);//递归搜索下个人
        team[u] = 0;//回溯状态
    }
    if(tn + 1 <= t)
    {
        team[u] = tn + 1;//新开一队
        dfs(u + 1, tn + 1);//搜索下个人
        team[u] = 0;
    }
}
int main()
{
    cin >> n >> t >> m;
    for(int i = 1; i <= m; i ++) cin >> a[i] >> b[i];
    dfs(1, 0);//从第一个人开始,当前队有0个对
    cout << res << endl;
    
    return 0;
}

相似题目:1118. 分成互质组 - AcWing题库 165. 小猫爬山 - AcWing题库

标签:剪枝,const,int,long,dfs,using,优化
From: https://www.cnblogs.com/ZouYua/p/17564881.html

相关文章

  • m基于虚拟力优化算法的二维室内红外传感器部署策略matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:    2.算法涉及理论知识概要        红外传感器在室内环境监测、安防、智能控制等领域中得到了广泛应用。在室内部署红外传感器时,其位置的选择对于传感器的性能和信号质量有着至关重要的影响。因此,如何确定红外传感器......
  • 优化基础3——最短路径算法和蚁群算法
    1.复习了一下迪杰斯特拉和弗洛伊德算法具体参考[最短路径问题]—Dijkstra算法最详解-知乎(zhihu.com)Floyd算法详解通俗易懂-知乎(zhihu.com)迪杰斯特拉解决不了负边权问题,假如确定了一个点2,将他加入了visited集合此时有一个点3到点2的边是负边权,实际权重更小了,但是......
  • 浅谈虚树优化线段树
    前言我们都知道动态开点权值线段树的空间复杂度是\(O(n\logV)\)的,但是很多题目中这样的空间是会被卡的,那我们能不能优化呢?实现看看下面这一棵树:在上图中,红色节点使我们平常会开的点。但是我们发现,其实只要维护绿色的点和红色的叶子结点。其实,绿色节点就是所有叶子结点......
  • hdu 1010 Tempter of the Bone (dfs+奇偶剪枝)
    小记:最开始以为是T时间内,用bfsWA了,后来知道是刚好T时间,然后就用dfs,相当于暴力了,然后简单的dfs提交TLE,必须剪枝。首先判最少需要的时间是否有,没有就不用继续了,而如果有,那么因为我们是要花掉T时间刚好到达,那么我们先保证能走到终点的时间,然后在路上花掉多余的时间此时,我们必须保证......
  • python怎么优化RPC通信
    Python如何优化RPC通信引言RPC(RemoteProcedureCall)是一种常见的分布式通信方式,用于在不同的计算机或进程之间调用远程的函数或方法。Python作为一种流行的编程语言,也提供了一些库和框架来实现RPC通信,如xmlrpc、jsonrpc、grpc等。然而,在大规模的分布式系统中,RPC通......
  • spark如何控制输出到hdfs上的小文件
    项目方案:Spark控制输出到HDFS上的小文件背景介绍在使用Spark进行数据处理和分析时,输出的结果数据通常存储在Hadoop分布式文件系统(HDFS)上。然而,有时输出的结果会被分割成大量的小文件,这可能对后续的数据读取和处理造成性能问题。因此,我们需要一种方法来控制输出到HDFS......
  • C# 循环性能优化
    varusers=newList<UserInfo>();for(inti=0;i<100000;i++){users.Add(newUserInfo{ID=i,Name="张三"+i.ToString(),......
  • MySQL(十五)分析优化器的查询计划:Trace
    1MySQL(十五)分析优化器的查询计划:Trace​ OPTIMIZER_TRACE是mysql5.6引入的一项追踪功能,它可以追踪优化器做出的各种决策(比如访问表的方法、各种开销计算和各种转换等等),并将结果记录到表INFORMATION_SCHEMA.OPTIMIZER_TRACE表中。​ Trace功能默认是关闭的,需要开启trace,设置JS......
  • Hadoop的hdfs云服务器配置踩坑记录
    本章更多的是通过hdfs的API接口问题角度记录坑点坑点记录一、能够远程访问和通过web端访问hdfs在java代码中添加或更改如下:Configurationconf=newConfiguration();conf.set("dfs.client.use.datanode.hostname","true");//添加此配置信息即可FileSystemfs=FileSys......
  • 决策单调性优化DP 学习笔记 & P4767 [IOI2000] 邮局 题解
    0.题面题目描述高速公路旁边有一些村庄。高速公路表示为整数轴,每个村庄的位置用单个整数坐标标识。没有两个在同样地方的村庄。两个位置之间的距离是其整数坐标差的绝对值。邮局将建在一些,但不一定是所有的村庄中。为了建立邮局,应选择他们建造的位置,使每个村庄与其最近的邮局......