Explanation

SöV≡ŀToṁ∂Pmo↔ḋ Implicit input, say [4,5,2].
m ḋ Convert each to binary
o↔ and reverse them: x = [[0,0,1],[1,0,1],[0,1]]
P Take all permutations of x
oṁ∂ and enumerate their anti-diagonals in y = [[0],[0,1],[1,0,0],[1,1],[1]..
S T Transpose x: [[0,1,0],[0,0,1],[1,1]]
ŀ Take the range up to its length: z = [1,2,3]
Then z is as long as the longest list in x.
öV Return the 1-based index of the first element of y
≡ that has the same length and same distribution of truthy values as z,
i.e. is [1,1,1]. If one doesn't exist, return 0.

2вí0ζœεvyƶNè})DgLQ}Z Full program (implicit input, e.g. [4, 6, 2])
2в Convert each to binary ([1,0,0], [1,1,0], [1,0])
í Reverse each ([0,0,1], [0,1,1], [0,1])
0ζ Zip with 0 as a filler ([0,0,0],[0,1,1],[1,1,0])
œ Get all sublists permutations
ε } Apply on each permutation...
vyƶNè} For each sublist...
yƶ Multiply each element by its index
Nè Get the element at position == sublist index
) Wrap the result in a list
DgLQ 1 if equal to [1,2,...,length of item]
Z Get max item of the list (1 if at least 1 permutations fill the conditions)
-- implicit output

Explanation

Then we pad all those lists with zeros to the left to make the array rectangular. The result is stored in n for later.

Permutations[...]

Yay, brute force, let's get all possible permutations of the input.

Tr/@...

This gets the trace for each permutation, i.e. the sum of the diagonal elements in the permutation. In other words, we add up the MSB from the first number, the next-to-MSB from the second number and so on. If the permutation is valid, all of these will be 1 and there will be as many 1s as the largest input number is wide.

Max[...]

We get the maximum trace, because the trace can never be more than that of a valid permutation.

...==Tr[1^#&@@n]

The right-hand side is just a golfy version of Length @ First @ n, i.e. it gets the width of the rectangular array, and therefore the width of the largest input number. We want to make sure that the trace of some permutation is equal to this.

\$\begingroup\$@Titus and thus we see how terrible I am at codegolf. And why most questions have a great answer by you in PHP. (and a few other languages).\$\endgroup\$
– Jo.Nov 7 '17 at 6:35

\$\begingroup\$Terrible for now. That´s a pretty good answer; and golfing skills come with experience.\$\endgroup\$
– TitusNov 7 '17 at 9:58

\$\begingroup\$No need for the lengthy string notation, just use something else that translates to “1” but is not integer. For example a boolean true: die("1") → die(!0).\$\endgroup\$
– manatworkNov 8 '17 at 8:05

\$\begingroup\$Hmm, this seems to fail for some of the false test cases? [1,15,3,1] seems to return true instead of false for example. Here is your code the online compiler of TIO. The other two test cases that fail are [1,7,1] and [15,15,15]. All the other test cases output the correct results.\$\endgroup\$
– Kevin CruijssenNov 8 '17 at 13:05

PHP, 121 bytes

function f($a,$s=0)
{
($v=array_pop($a)) # pop element from array
|| # if nothing could be popped (empty array)
(0|$g=log($s+1,2))-$g # and $s+1 is a power of 2
||die("1"); # then print "1" and exit
for($b=.5;$v>=$b*=2;) # loop through the bits:
$v&$b # if bit is set in $v
&&~$s&$b # and not set in $s
&&f($a,$s|$b); # then set bit in $s and recurse
}

A long explicit verb this time. I tried a tacit one for the same algorithm, but it turned out to be even longer and uglier than this. Far away from Adám's solution.

Explanation:
(y is the right argument of the function)

,y - adds a leading axis to the argument
(if it's scalar becomes an array of length 1)
.A - finds the permutations according to the left argument
(i.!#y) - factorial of the length of the argument, for all permutations
#: - convert each element to binary
*"2 - multiply each cell by identity matrix
( ) - group
=i.{:$#:y - identity matrix with size the length
of the binary representation of the argument
(#y){. - takes as many rows from the identity matrix
as the size of the list (pad with 0 if neded)
*/"1+/"2 - sums the rows and multiplies the items
to check if forms an identity matrix
*+/ - add the results from all permutations and
returns 1 in equal or greater then 1

f=function(i){ #anonymous function when golfed
a=do.call(rbind,Map(`==`,Map(intToBits,i),1)) #convert integers to binary, then logical
#bind results together in matrix
n=max(unlist(apply(a,1,which))) #determine max number of bits
any(unlist(g(a[,1:n,drop=F],n))) #apply recursive function
}
g=function(a,p){
if(p==1)return(any(a[,1])) #check if first bit is available still
Map(function(x){g(a[x,,drop=F],p-1)},which(a[,p])*-1) #strip row used for current bit
#and apply the function recursively
}

I realized the no-row check was unnecessary with the drop=F arguments. Also removed some pesky whitespace.

\$\begingroup\$Could you add an explanation? Also, a try it online link would be useful.\$\endgroup\$
– Antti29Nov 9 '17 at 9:44

\$\begingroup\$Some tips when golfing in C: 1/ in many challenges (this one included), you're allowed to submit a function instead of a full program, 2/ you have to output a truthy/falsey value, this can be anything as long as it's consistent (you can output 0 / 1 instead of "false"/"true"). Lastly, this code doesn't seem to work: [1, 7, 1] should return false, and [52, 114, 61, 19, 73, 54, 83, 29] should return true\$\endgroup\$
– scottinetNov 9 '17 at 12:05

Your Answer

If this is an answer to a challenge…

…Be sure to follow the challenge specification. However, please refrain from exploiting obvious loopholes. Answers abusing any of the standard loopholes are considered invalid. If you think a specification is unclear or underspecified, comment on the question instead.

…Try to optimize your score. For instance, answers to code-golf challenges should attempt to be as short as possible. You can always include a readable version of the code in addition to the competitive one.
Explanations of your answer make it more interesting to read and are very much encouraged.

…Include a short header which indicates the language(s) of your code and its score, as defined by the challenge.

More generally…

…Please make sure to answer the question and provide sufficient detail.

…Avoid asking for help, clarification or responding to other answers (use comments instead).

Code Golf Stack Exchange is a site for recreational programming competitions, not general programming questions. Challenges must have an objective scoring criterion, and it is highly recommended to first post proposed challenges in the Sandbox.