求大佬看看这种思路有没有出路!!!/kk
查看原帖
求大佬看看这种思路有没有出路!!!/kk
183881
_shy楼主2020/12/1 19:12

代码我就不发了(太丑兰),我说一下我的思路:

一、我发现所要的m只是要使b[1->m]可以组成a[1->n]中的任何一个数

二、接着我又觉得a[i]越小,越会在b[i]中,所以对a小到大排序

三、然后,初始化,b[1] = a[1], num = 1;//num是m

四、就是 for i = 2 to n:对于a[i]看看他是否能被b[]组成,于是我就写了个这个:

inb check (int x) 
{
	int comg = dp[1], sum = 0;
	for (rint i = 1; i <= dp[0]; i++)
	{
		sum += dp[i];
		comg = gcd (comg, dp[i]);
		if (x % dp[i] == 0 || (x % comg == 0 && x >= sum))//看看是否可以组成
		return false;
	}
	return true;
}

int main ()
{
	//freopen (".in", "r", stdin); freopen (".out", "w", stdout);
	t = read ();
	
	while (t --) 
	{
		n = read ();
		for (rint i = 1; i <= n; i++)
			a[i] = read ();
			
		sort (a + 1, a + n + 1);
		memset (dp, 0, sizeof (dp));
		dp[0] = 1, dp[1] = a[1];
		
		for (rint i = 2; i <= n; i++) 
		{
			if (!check (a[i])) continue;//这里
			dp[++dp[0]] = a[i];//无法组成就把它加进去吧
		}
		
		printf ("%d\n", dp[0]);
	}

但是,我忽略了一个很重要的四清:

就是我用裴蜀定理判的是否可以组成,忘了张数不可为负,求出来的值整数解,而不是

正整数解!!!

比如:11x + 13y = 17 有解, 但是x = -1, y = 2。。。

于是我先问一下怎么在我的思路上解决这个问题,求求各位大佬救救我吧/kk

2020/12/1 19:12
加载中...