#include <iostream> using namespace std; int zapalone_bity(int b) { int zapalone = 0; while (b) { if (b % 2 == 1) zapalone++; b /= 2; } return zapalone; } int f_skok(int n, int &jakosc,int m, int start,int &max,int tab[2000]) { jakosc = 0; for (int cos = 0;cos < (n - 1);cos++) { max=f_skok(n-1, jakosc, m, start, max,tab); } for (int start = 0;start < n;start++) { for (int skok = 1;skok < (m / n);skok++) { for (int nuty = 0;nuty < n;nuty++) { for (int b = start; b <= m;b += skok) { jakosc += tab[nuty] * zapalone_bity(b); } if (max < jakosc) max = jakosc; } jakosc = 0; } } return max; } int main() { int max=-9999999999999; int n; int m; cin >> n; cin >> m; int zapalone = 0; int jakosc=0; int start=0; int ile=m-n+1; int tab[2000]; for (int z = 0;z < n;z++) { int tmp; cin >> tmp; tab[z] = tmp; } max=f_skok(n,jakosc,m,start,max, tab); cout<< max << endl; 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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #include <iostream> using namespace std; int zapalone_bity(int b) { int zapalone = 0; while (b) { if (b % 2 == 1) zapalone++; b /= 2; } return zapalone; } int f_skok(int n, int &jakosc,int m, int start,int &max,int tab[2000]) { jakosc = 0; for (int cos = 0;cos < (n - 1);cos++) { max=f_skok(n-1, jakosc, m, start, max,tab); } for (int start = 0;start < n;start++) { for (int skok = 1;skok < (m / n);skok++) { for (int nuty = 0;nuty < n;nuty++) { for (int b = start; b <= m;b += skok) { jakosc += tab[nuty] * zapalone_bity(b); } if (max < jakosc) max = jakosc; } jakosc = 0; } } return max; } int main() { int max=-9999999999999; int n; int m; cin >> n; cin >> m; int zapalone = 0; int jakosc=0; int start=0; int ile=m-n+1; int tab[2000]; for (int z = 0;z < n;z++) { int tmp; cin >> tmp; tab[z] = tmp; } max=f_skok(n,jakosc,m,start,max, tab); cout<< max << endl; return 0; } |