#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; } |