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