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