求和比较WA60,求大佬帮忙

小蓝在学习C++数组时,突发奇想想知道如果将一个连续的正整数数组拆分成两个子数组,然后对拆分出的两个子数组求和并做差,且差值正好等于一个固定的正整数,像这样同一连续的正整数数组拆分方案有多少种。

我们一起帮助小蓝设计一下规则:

      第一给出两个正整数N和M;

      第二从1到N组成一个连续正整数数组A(A={1,2,3,4……N});

      第三将数组A拆分成两个子数组A1、A2(1.两个子数组中不能出现相同的数;2.子数组中的数字可以是连续的也可以是不连续的;3.拆分出的两组子数组的元素个数可以不同,但总数量等于A数组元素个数);

      第四对A1、A2两个子数组分别求和;

      第五对A1、A2两个子数组的和做差(大的数字减去小的数字);

      第六如果差值正好等于固定值M,则判定此拆分方案成立。

如:N=5,M=1,连续正整数数组A={1, 2, 3, 4, 5}。

符合条件的拆分方案有3种:

      A1={1, 2, 4}, A2={3, 5}, 其中A1的和为7,A2的和为8,和的差值等于1

      A1={1, 3, 4}, A2={2, 5}, 其中A1的和为8,A2的和为7,和的差值等于1

      A1={3, 4}, A2={1, 2, 5}, 其中A1的和为7,A2的和为8,和的差值等于1

【输入描述】
输入两个正整数N和M(3<N<30)和M(0≤M≤500),两个正整数由一个空格隔开

【输出描述】
输出一个正整数,表示1到N(包含1和N)连续的正整数数组中有多少种方案,使得拆分的两个子数组部分的差值等于M。

【样例输入】
5 1
【样例输出】
3
2 个赞
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
ll n,m,ans=0;
void dfs(ll step,ll x,ll y)
{
	if(step>n)
	{
		if(x-y==m) ans++;
		return ;
	}
	dfs(step+1,x+step,y);
	dfs(step+1,x,y+step);
}
int main()
{
	scanf("%lld%lld",&n,&m);
	dfs(1,0,0);
	printf("%lld\n",ans);
	return 0;
}

代码如图

2 个赞

蓝桥杯省赛集训第一天 - 站点反馈 - 信友队论坛 (xinyoudui.com)
你可以去看一下

2 个赞

谢谢大佬帮忙!! 我去看一下。

3 个赞

有用的话就给个解决方案和赞吧

2 个赞

有用,谢谢!!!

3 个赞

赞过了。

3 个赞

完成了就好,争取把其它题都给提交掉AC

2 个赞