是我理解错题意了嘛?虽然能过样例,但是其他的一些样例不对安
查看原帖
是我理解错题意了嘛?虽然能过样例,但是其他的一些样例不对安
853953
ljx_gkx楼主2023/3/26 17:36
#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;
const int mod = 1e9 + 7;
int n;
int a[100010];
int path[6];
int ans;

bool judge(int a, int b, int c)
{
	//三个数的嘛,a,b,c ==> a+b>c a+c>b b+c > a 
	if (a+b > c && a+c > b && b+c > a){
		return true;
	}
	return false;
}

bool deal(int way[])
{
	//1 1 2 2;
	int a, b, c;
	for (int i=1; i <= 4; i ++)
	{
		for (int j=i+1; j <= 4; j ++)
		{
			a = way[i]+way[j];	//四个数变两个数! 
			for (int k=1; k <= 4; k ++)
			{
				if (k != i && k != j)
					b = way[k];
				for (int l=1; l <= 4; l ++)
				{
					if (l !=k && l != j && l != i)
					{
						c = way[l];
						if (judge(a, b, c))
							return true;
					}
				}
			}
		}
	}
	return false;
}

void dfs(int u, int last)
{
	if (u > 4)	//处理方案了! 
	{
		//处理每种方案!
		if (deal(path))
		{
			ans ++; 
			ans%=mod;
		}
		return ;
	}
	
	for (int i=last; i <= n; i ++)
	{
		path[u] = a[i];
		dfs (u + 1, i+1);
	}
}

int main()
{
	cin >> n;
	for (int i=1; i <= n; i ++)
		cin >> a[i];
	dfs(1, 1);
	cout << ans%mod;
	return 0;
}
2023/3/26 17:36
加载中...