llllmz

导航

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--;
    }
}

超时了,还需要进一步优化,但是思想是对的。复试要求不高,毕竟时间有限,能跑就行。

posted on 2024-03-03 16:21  神奇的萝卜丝  阅读(16)  评论(0)    收藏  举报