51nod 1400 序列分解

来源:互联网 发布:网盘搜索软件 编辑:程序博客网 时间:2024/05/06 20:02

只有40长度,dfs一下就好。

由于剪枝,时间复杂度O(2^20)。

#include<bits/stdc++.h>int a[44],b[44],arr[44],n,flag;void dfs(int deep,int alen,int blen){if(deep==n||flag){flag=1;return;}if(alen==blen){a[alen+1]=arr[deep];dfs(deep+1,alen+1,blen);}else if(alen>blen){if(a[blen+1]==arr[deep]){b[blen+1]=arr[deep];dfs(deep+1,alen,blen+1);}if(alen<n/2){a[alen+1]=arr[deep];dfs(deep+1,alen+1,blen);}}else{if(b[alen+1]==arr[deep]){a[alen+1]=arr[deep];dfs(deep+1,alen+1,blen);}if(blen<n/2){b[blen+1]=arr[deep];dfs(deep+1,alen,blen+1);}}}int main(){int i,T;scanf("%d",&T);while(T--){scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&arr[i]);}flag=0;dfs(0,0,0);if(flag)printf("Good job!!\n");elseprintf("What a pity!\n");}}


0 0