首页 > 其他分享 >分成互质组 (信息学奥赛一本通)

分成互质组 (信息学奥赛一本通)

时间:2024-11-11 20:19:56浏览次数:3  
标签:信息学 组中 return int len dfs 奥赛 ans 互质

题目:

分析: 

读了读题,数据范围较小,可以考虑dfs依次枚举每个数能否加到前面的某一个组中,(当然枚举第一个数的时候,前面没有组),如果能的话,则加入到某一个组中,但总的组的个数不变如果不能的话,则新建一个组,此时总的组的个数加1,然后把这个数加入到这个新建的组中。直到枚举的这n个数全部在组中。当然从第一个数开始时,此时没有组,所以从dfs(1, 0)开始。话不多说,具体的细节看code吧。

code: 

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl "\n"
const int N = 25;
vector<int>g[N];//存放组 每组都是互质的数
int ans = N;
int n;
int a[N];
int gcd(int a, int b) {//求最大公因数 
	if(!b) return a;
	return gcd(b, a % b);
}
bool check(int x, int c) {//判断x能否加入到序号为c的这个组中 
	for(int i = 0; i < g[c].size(); i++) {//枚举c这个组中的每一个元素 
		if(gcd(x, g[c][i]) > 1) return false; 
	}
	return true;
}
void dfs(int u, int len) {
	if(len >= ans) return;//剪枝 
	if(u > n) {//n个数看完后,更新答案 
		ans = len;//len >= ans的已被剪枝 则只剩下len < ans的 
		return;
	}
	for(int i = 0; i < len; i++) {//枚举前面每一个组 
		if(check( a[u], i)) {//这个数能加入到前面出现过的组中 
			g[i].push_back(a[u]);//把这个数加入i这个组 
			dfs( u + 1, len);//组的个数不变,看下一个数 
			g[i].pop_back();//回溯
		}
	}
	//如果加入不进去 则新开一个组
	g[len].push_back(a[u]);
	dfs( u + 1, len + 1);
	g[len].pop_back();
	
}
signed main() {
	cin >> n;
	for(int i = 1; i <= n; i++) cin >> a[i];
	dfs(1, 0);//从第一个数开始看,此时没有组数 
	cout << ans << endl;
	return 0;
}

标签:信息学,组中,return,int,len,dfs,奥赛,ans,互质
From: https://blog.csdn.net/Jeraphael/article/details/143693624

相关文章

  • 南沙C++信奥赛陈老师解一本通题 1225:金银岛
    ​ 【题目描述】某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为w的物品。岛上金属有ss个种类,每种金属重量不同,分别为n1,n2,...,nsn1,n2,...,ns,同时每个种类......
  • CSP/信奥赛C++完整学习规划(价值2万的csp-j完整课程体系)
    CSP/信奥赛C++课程完整学习视频一站式掌握信奥赛知识冲刺信奥赛拿奖课程购买后永久学习,不受限制!阶段一:《信奥赛C++语法基础》课程目标:轻松入门C++语法课程链接:https://edu.csdn.net/course/detail/39557阶段二:《信奥赛C++语法进阶》课程目标:快速进阶C++语法......
  • 2025 - 全网最牛的生物信息学分析 - 一键式生成DIFF_GSEA_WGCNA_GO_KEGG_DO
    2025-全网最牛的生物信息学分析-一键式生成DIFF_GSEA_WGCNA_GO_KEGG_DO先给你炫一下图直接上代码setwd("/Users/wangyang/Desktop/BCBM/02DIFF_GSEA_WGCNA")#引用包library(ggplot2)library(limma)library(pheatmap)library(ggsci)library(dplyr)lappl......
  • Spring Boot框架在信息学科平台开发中的高级应用
    4系统概要设计4.1概述本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示:图4-1系统工作原理图4.2系统结构本系统......
  • 信息学科平台系统构建:Spring Boot框架深度解析
    4系统概要设计4.1概述本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示:图4-1系统工作原理图4.2系统结构本系统......
  • Spring Boot框架在信息学科平台建设中的实战技巧
    3系统分析3.1可行性分析通过对本基于保密信息学科平台系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。3.1.1技术可行性本基于保密信息学科平台系统采用SpringBoot框架,JAVA作为开......
  • 信息学科平台系统设计与实现:Spring Boot技术全解析
    4系统概要设计4.1概述本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示:图4-1系统工作原理图4.2系统结构本系统......
  • Spring Boot在信息学科平台建设中的应用
    1系统概述1.1研究背景随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理基于保密信息学科平台系统的相关信息成为必然。开发合适的基于保密信息学科平台系统,可以方......
  • 《上海市计算机学会竞赛平台2024年8月月赛丙组题目T1 统计得分 T2 等差数列的素性 T3
    T1统计得分内存限制: 256 Mb时间限制: 1000 ms题目描述在一场知识竞赛中,选手答对一题得 11 分,答错不得分且要倒扣 11 分,但扣分不能让分数小于 00。给定一个由 Y 及 N 构成的字符序列,答对记为 Y,答错记为 N。选手一开始从 00 分开始,请输出选手最后的得分......
  • 南沙C++信奥赛陈老师解一本通题 1345:【例4-6】香甜的黄油
    ​ 【题目描述】农夫John发现做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道N(1≤N≤500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油。当然,他将付出额外的费用在奶牛上。农夫John很狡猾。像以前的巴甫洛夫,他知道他可以训练这些奶牛,让它们在听到铃声时......