#include <iostream> using namespace std; int ost[25000021]; int licz[5021]; int tab[25000060]; int main() { int n,a,r,pot,wyn=0; cin>>n; for(int i=0; i<n; i++) { cin>>a; licz[a]++; } for(int i=5011;i>=1; i--) { for(int z=0;z<licz[i];z++) { for(int j=(n*5000)-i; j>=0; j--) { if(tab[j]!=0||j==0) { if(tab[j+i]==0||tab[j+i]>tab[j]+1) { tab[j+i]=tab[j]+1; ost[j+i]=i; } } } } } int f=0,x=0,t=0; for(int i=1; true; i*=2) { if(tab[i+f]>0) { x++; f+=i; } else { break; } } for(int i=0; i<x; i++) { r=1; for(int j=0; j<i; j++) { r=r*2; } for(int y=1; y<=2*r; y++) { t=0; { if(y>5017) { break; } t+=licz[y]; } } pot=1; for(int i=t; i>0; i--) { pot=pot*2; pot=pot%1000000007; } wyn+=pot; } wyn=wyn%10000000007; cout<<wyn; }
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 72 73 74 75 | #include <iostream> using namespace std; int ost[25000021]; int licz[5021]; int tab[25000060]; int main() { int n,a,r,pot,wyn=0; cin>>n; for(int i=0; i<n; i++) { cin>>a; licz[a]++; } for(int i=5011;i>=1; i--) { for(int z=0;z<licz[i];z++) { for(int j=(n*5000)-i; j>=0; j--) { if(tab[j]!=0||j==0) { if(tab[j+i]==0||tab[j+i]>tab[j]+1) { tab[j+i]=tab[j]+1; ost[j+i]=i; } } } } } int f=0,x=0,t=0; for(int i=1; true; i*=2) { if(tab[i+f]>0) { x++; f+=i; } else { break; } } for(int i=0; i<x; i++) { r=1; for(int j=0; j<i; j++) { r=r*2; } for(int y=1; y<=2*r; y++) { t=0; { if(y>5017) { break; } t+=licz[y]; } } pot=1; for(int i=t; i>0; i--) { pot=pot*2; pot=pot%1000000007; } wyn+=pot; } wyn=wyn%10000000007; cout<<wyn; } |