求调,悬1关
  • 板块学术版
  • 楼主cyhyeee
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/8/5 16:55
  • 上次更新2023/11/3 05:43:44
查看原帖
求调,悬1关
973237
cyhyeee楼主2023/8/5 16:55

题目

code:

#include <bits/stdc++.h>
using namespace std;
int n, m, a[10000], f, mid, w[4];

void dfs(int d, int k) {
	if (f||k>4)
		return;
	if (d == m) {
		cout << "yes\n";
		f = 1;
		return;
	}
	for (int i = 0; i < 4; i++) {
		if (w[i] + a[d] <= mid) {
			w[i] += a[d];
			dfs(d + 1, k);
			w[i] -= a[d];
		} else {
			w[k + 1] += a[d];
			dfs(d + 1, k + 1);
			w[k + 1] -= a[d];
		}
	}
}

int main() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		int f1=0;
		f=0;
		int s = 0;
		cin >> m;
		for (int i = 0; i < m; i++) {
			cin >> a[i];
			s += a[i];
		}
		if (s % 4 != 0||m<4) {
			cout << "no\n";
			continue;
		}
		mid = s / 4;
		for (int i = 0; i < m; i++) {
			if(a[i]>mid){
				cout<<"no\n";
				f1=1;
				break;
			}
		}
		if(f1==1) continue;
		sort(a, a + m, greater<int>());
		dfs(0, 1);
		for (int i = 0; i < m; i++) {
			a[i] = 0;
		}
		if(f==0) cout<<"no\n";
	}
	return 0;
}
2023/8/5 16:55
加载中...