此题有一个很明显的条件那就是如果一个数组中所有数的lcm在这个数组中,那这个数一定是最大的数,因为lcm一定是大于等于所有数的,所以可以从贪心的角度去考虑,首先如果整个数组的lcm等于最大的数,那么就去删掉这个最大的数,继续观察剩下的数,重复操作,至于为什么可以直接删除最大的数,因为当所有数的lcm等于最大的数时,其他的数一定是最大数的因子,只有删掉最大的数,lcm才会变化,所以删除最大的数一定最优,实现时可以反向操作,那便是从小到大的加数
#include<iostream>
#include<cstring>
#include<cstdio>
小蓝有一个长度为 n 的整数序列 a1,a2,…,an。他定义一个非空序列为“平衡的”,当且仅当该序列中所有元素的最小公倍数(LCM)不在这个序列中。小蓝希望从原序列中挑选一个子序列(可以通过删除原序列中若干元素得到,也可以一个都不删除),使得该子序列是平衡的。请你帮他求出最长的平衡子序列的长度。
数据范围:
第一行输入一个整数 T(1≤T≤100),表示测试数据的组数。接下来每组数据包含两行:
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册