1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>

typedef unsigned long long llu;
typedef long long lld;

llu C(llu a)
{
llu t = a,m[] = {0x5555555555555555,0x3333333333333333,0x0f0f0f0f0f0f0f0f,0x00ff00ff00ff00ff,0x0000ffff0000ffff,0x00000000ffffffff};

	t = (t & m[0]) + ((t >> 1) & m[0]);
	t = (t & m[1]) + ((t >> 2) & m[1]);
	t = (t & m[2]) + ((t >> 4) & m[2]);
	t = (t & m[3]) + ((t >> 8) & m[3]);
	t = (t & m[4]) + ((t >> 16) & m[4]);
	t = (t & m[5]) + ((t >> 32) & m[5]);
	return t;
}

lld tone(lld *a,llu n,llu m)
{
llu i,mv = 0,v;

	for (i = m; i > n; i--)
	{
//		printf("%llu %llu\n",i,n);
		v = a[n]*C(i);
		if (n > 0) v += tone(a,n-1,i-1);
		if (v > mv) mv = v;
	}
	return mv;
}


int main()
{
llu N,n,M,m;
lld a[200]; 

	scanf("%llu %llu",&N,&M);
	for (n = 0; n < N; n++) scanf("%lld",a+n);
	
	printf("%llu\n",tone(a,N-1,M));
	
	return 0;
}