#include <bits/stdc++.h>
using namespace std;
int a,tab[5001],odp,najw;
int uzy[26000];
int main()
{
scanf("%d",&a);
for(int i=0;i<a;++i)
scanf("%d",&tab[i]);
uzy[0]=1;
sort(tab,tab+a);
for(int i=0;i<a;++i)
{
odp+=uzy[5001];
uzy[5001]+=uzy[5001];
odp%=1000000007;
uzy[5001]%=1000000007;
for(int j=5000;j>=tab[i]-1;--j)
{
if(j+tab[i]<=5000)
{
uzy[j+tab[i]]+=uzy[j];
uzy[j+tab[i]]%=1000000007;
odp+=uzy[j];
odp%=1000000007;
}
else
{
uzy[5001]+=uzy[j];
uzy[5001]%=1000000007;
odp+=uzy[j];
odp%=1000000007;
}
}
}
printf("%d",odp);
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 | #include <bits/stdc++.h> using namespace std; int a,tab[5001],odp,najw; int uzy[26000]; int main() { scanf("%d",&a); for(int i=0;i<a;++i) scanf("%d",&tab[i]); uzy[0]=1; sort(tab,tab+a); for(int i=0;i<a;++i) { odp+=uzy[5001]; uzy[5001]+=uzy[5001]; odp%=1000000007; uzy[5001]%=1000000007; for(int j=5000;j>=tab[i]-1;--j) { if(j+tab[i]<=5000) { uzy[j+tab[i]]+=uzy[j]; uzy[j+tab[i]]%=1000000007; odp+=uzy[j]; odp%=1000000007; } else { uzy[5001]+=uzy[j]; uzy[5001]%=1000000007; odp+=uzy[j]; odp%=1000000007; } } } printf("%d",odp); return 0; } |
English