#include<bits/stdc++.h> using namespace std; int tab[100010][2]; long long sumy[100010]; bool ktore[100010]; long long zlicz(int n) { long long mini=0, wynik=0; for(int i=1;i<=n;i++) { sumy[i]=sumy[i-1] + tab[i][ktore[i]]; wynik=max(wynik, sumy[i]-mini); mini = min(mini, sumy[i]); } return wynik; } int main() { int n, i, m; long long naj=1000000000000000000, ij; scanf("%d%d", &n, &m); for(i=1;i<=n;i++) scanf("%d", &tab[i][0]); for(i=1;i<=n;i++) scanf("%d", &tab[i][1]); long long p=(1<<n); for(long long j=(1<<(n-m))-1;j<p;j++) { long long k=j, x=0; for(i=n;i>=1;i--) { ktore[i]=k%2; k/=2; if(ktore[i]==0) x++; } if(x!=m) continue; long long w = zlicz(n); /* printf("%lld:%lld ", j, x); for(int xx=1;xx<=n;xx++) printf("%d ", ktore[xx]); printf(" %lld\n", w); */if(w<naj) { naj=w; ij=j; } } printf("%lld\n", naj); for(i=n;i>=1;i--) { ktore[i]=ij%2; ij/=2; } for(i=1;i<=n;i++) { printf("%c", 'A'+ktore[i]); } }
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 | #include<bits/stdc++.h> using namespace std; int tab[100010][2]; long long sumy[100010]; bool ktore[100010]; long long zlicz(int n) { long long mini=0, wynik=0; for(int i=1;i<=n;i++) { sumy[i]=sumy[i-1] + tab[i][ktore[i]]; wynik=max(wynik, sumy[i]-mini); mini = min(mini, sumy[i]); } return wynik; } int main() { int n, i, m; long long naj=1000000000000000000, ij; scanf("%d%d", &n, &m); for(i=1;i<=n;i++) scanf("%d", &tab[i][0]); for(i=1;i<=n;i++) scanf("%d", &tab[i][1]); long long p=(1<<n); for(long long j=(1<<(n-m))-1;j<p;j++) { long long k=j, x=0; for(i=n;i>=1;i--) { ktore[i]=k%2; k/=2; if(ktore[i]==0) x++; } if(x!=m) continue; long long w = zlicz(n); /* printf("%lld:%lld ", j, x); for(int xx=1;xx<=n;xx++) printf("%d ", ktore[xx]); printf(" %lld\n", w); */if(w<naj) { naj=w; ij=j; } } printf("%lld\n", naj); for(i=n;i>=1;i--) { ktore[i]=ij%2; ij/=2; } for(i=1;i<=n;i++) { printf("%c", 'A'+ktore[i]); } } |