Square c

要去寻找所有可能性,典型的dfs问题
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
bool judge(int* temp,int* visit,int noweedge,int length,int n,int nowlength){
if(noweedge==5) return true;
if(nowlength>length) return false;
if(nowlength==length) return judge(temp,visit,noweedge+1,length,n,0);
for(int i=0;i<n;i++){
if(visit[i]==0){
visit[i]=1;
int x=nowlength+temp[i];
if(x<=length) {
if (judge(temp, visit, noweedge, length, n, x)) return true;
}
visit[i]=0;
}
}
return false;
}
int main(){
int count;
scanf("%d",&count);
while(count){
int n;
scanf("%d",&n);
int* temp=(int*)malloc(sizeof(int)*n);
int* visit=(int*)malloc(sizeof(int)*n);
int sum=0;
for(int i=0;i<n;i++){
scanf("%d",&temp[i]);
sum+=temp[i];
visit[i]=0;
}
if(sum % 4 !=0) {
printf("no\n");
}else{
if(judge(temp,visit,1,sum/4,n,0)){
printf("yes\n");
}else{
printf("no\n");
}
}
count--;
}
}
超时了,还需要进一步优化,但是思想是对的。复试要求不高,毕竟时间有限,能跑就行。
浙公网安备 33010602011771号