求助,为啥会WA
查看原帖
求助,为啥会WA
534800
管泽昊1691楼主2021/10/2 14:28



#include <bits/stdc++.h>

using namespace std;

int n,a[90];
int Max,he;
int cnt;
int tot;
int i1;
bool vis[90];

bool check(int wei,int flag,int pan){
	pan += a[wei];
	vis[wei] = true;
	tot++;
	if(pan == flag) {
		pan = 0;
		return true;
	}
	if(pan > flag) {
		vis[wei] = false;
		pan -= a[wei];
		tot--;
		return false;
	}	
	
	for(int i = wei;i <= n;i ++){
		if(vis[i]) continue;
		if(check(i,flag,pan)) return true;		
	}
	vis[wei] = false;
	tot--;
	return false;
}

bool cmp(int x,int y){
	return x > y; 
}

int main(){
	scanf("%d",&n);
	int N = n;
	
	for(int i = 1;i <= N;i ++){
		int g;
		scanf("%d",&g);
		if(g > 50){
			n--;
			continue;
		} 
		a[++i1] = g;
		he += a[i1];
		Max = max(Max,a[i1]);
	}
	sort(a + 1,a + n + 1,cmp);		
	
	for(int i = 1;i <= he;i ++){		
		if(he % i == 0 && i >= Max) {
			tot = 0;			
			cnt = 0;
			memset(vis,false,sizeof vis);
			
			for(int j = 1;j <= n;j ++){
				if(!vis[j]&&check(j,i,0)) cnt++;				
			}
			if(cnt == he / i && tot == n){
				cout << i;
				return 0;
			}
		}
	}
}
2021/10/2 14:28
加载中...