90分求助!第9个点tle
查看原帖
90分求助!第9个点tle
547002
hang09楼主2022/6/1 20:56
#include <iostream>
using namespace std;

int m,w[30],k = 0;
bool flag;

void dfs(int step,int l1,int l2,int l3,int l4)
{
	if(flag == true)return;
	if(l1 > k || l2 > k || l3 > k || l4 > k)return;
	if(step > m)
	{
		flag = true;
		return;
	}
	dfs(step + 1,l1 + w[step], l2, l3, l4);
	dfs(step + 1,l1 ,l2 + w[step], l3, l4);
	dfs(step + 1,l1 ,l2,l3 + w[step],l4);
	dfs(step + 1,l1 ,l2,l3,l4 + w[step]);
}

int main()
{
	int n;
	cin >> n;
	for(int i = 1; i <= n; i++)
	{
		cin >> m;
		k = 0;
		for(int j = 1; j <= m; j++)
		{
			cin >> w[j];
			k += w[j];
		}
		k /= 4;
		flag = false;
		dfs(1,0,0,0,0);
		if(flag == false)cout << "no" << endl;
		if(flag == true) cout << "yes" << endl;
	}
	return 0;
}
2022/6/1 20:56
加载中...