#include<bits/stdc++.h>
using namespace std;
#define st first
#define nd second
#define pb push_back
#define mp make_pair
vector<int> tab;
int main(){
int n;
cin>>n;
int k[n];
for(int i=0;i<n;i++){
int x;
cin>>x;
tab.pb(x);
}
sort(tab.begin(),tab.end());
for(int i=0;i<n;i++){
if(i==0){
k[i]=tab[i];
}
else{
k[i]=tab[i]+k[i-1];
}
}
long long sumy[k[n-1]+1];
sumy[0]=1;
long long wynik=-1;
for(int i=1;i<=k[n-1];i++){
sumy[i]=0;
}
if(tab[0]==1){
for(int i=0;i<n;i++){
for(int j=tab[i]-1;j<k[i]-tab[i];j++){
if(sumy[j]>0){
sumy[j+tab[i]]+=sumy[j];
sumy[j+tab[i]]=sumy[j+tab[i]]%1000000009;
}
}
if(sumy[k[i]-tab[i]]>0){
sumy[k[i]]=1;
}
}
}
else{
cout<<0;
return 0;
}
for(auto i:sumy){
wynik+=i;
wynik=wynik%1000000009;
}
cout<<wynik%1000000009;
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 | #include<bits/stdc++.h> using namespace std; #define st first #define nd second #define pb push_back #define mp make_pair vector<int> tab; int main(){ int n; cin>>n; int k[n]; for(int i=0;i<n;i++){ int x; cin>>x; tab.pb(x); } sort(tab.begin(),tab.end()); for(int i=0;i<n;i++){ if(i==0){ k[i]=tab[i]; } else{ k[i]=tab[i]+k[i-1]; } } long long sumy[k[n-1]+1]; sumy[0]=1; long long wynik=-1; for(int i=1;i<=k[n-1];i++){ sumy[i]=0; } if(tab[0]==1){ for(int i=0;i<n;i++){ for(int j=tab[i]-1;j<k[i]-tab[i];j++){ if(sumy[j]>0){ sumy[j+tab[i]]+=sumy[j]; sumy[j+tab[i]]=sumy[j+tab[i]]%1000000009; } } if(sumy[k[i]-tab[i]]>0){ sumy[k[i]]=1; } } } else{ cout<<0; return 0; } for(auto i:sumy){ wynik+=i; wynik=wynik%1000000009; } cout<<wynik%1000000009; return 0; } |
English