Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <vector>
- #include <algorithm>
- using namespace std;
- int busco,N,M;
- int largos[22];
- int flagg=0;
- void back(int mask, int coincidencias, int valor_actual, int pos)
- {
- if(flagg)
- return;
- if(coincidencias==4 or mask==(1<<(M+1))-1 )
- {
- flagg=1;
- return;
- }
- for(int i=pos;i<M;i++)
- {
- if(flagg)
- return;
- if(!(mask&(1<<i)) and largos[i]+valor_actual<busco)
- for(int j=i+1;j<M;j++)
- {
- if(flagg)
- return;
- if(!(mask&(1<<j)) and largos[i]+largos[j]+valor_actual<=busco)//pa que no se pase
- {
- if(flagg)
- return;
- if(largos[i]+largos[j]+valor_actual<busco)
- {
- back(mask | (1<<j) | (1<<i),coincidencias,valor_actual+largos[i]+largos[j],j+1);
- }
- else
- if(largos[i]+largos[j]+valor_actual==busco)
- {
- if(flagg)
- return;
- if(coincidencias+1==4)
- {
- flagg=1;
- return;
- }
- back(mask | (1<<j) | (1<<i),coincidencias+1,0,0);
- }
- }
- }
- if(!(mask&(1<<i)) and largos[i]+valor_actual==busco)
- {
- if(coincidencias+1==4)
- {
- flagg=1;
- return;
- }
- back(mask | (1<<i),coincidencias+1,0,0);
- }
- }
- }
- int main()
- {
- scanf("%d",&N);
- for(int i=0;i<N;i++)
- {
- scanf("%d",&M);
- int sum=0;
- for(int j=0;j<M;j++)
- {
- scanf("%d",&largos[j]);
- sum+=largos[j];
- }
- if(sum%4)
- printf("no\n");
- else
- {
- busco=sum/4;
- int coincide=0;
- for(int j=0;j<M;j++)
- if(largos[j]==busco)
- coincide++;
- if(coincide==4)
- {
- printf("yes\n");
- continue;
- }
- flagg=0;
- int mascara=1<<M;
- back(mascara,0,0,0);
- if(flagg)
- printf("yes\n");
- else
- printf("no\n");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement