#include<bits/stdc++.h> using namespace std; const long long mod=1000000000+7; long long dp[5000+69]; int arr[5000+69]; int main(){ int n,i,j,ma; long long result; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&arr[i]); sort(arr,arr+n); ma=arr[n-1]; dp[0]=1; for(i=0;i<n;i++){ for(j=ma;j>=arr[i]-1;j--) dp[min(ma,j+arr[i])]=(dp[min(ma,j+arr[i])]+dp[j])%mod; //for(j=0;j<=ma;j++) //printf("j:%d arr:%d dp:%lld\n",j,arr[i],dp[j]); } result=0; for(i=1;i<=ma;i++) result=(result+dp[i])%mod; printf("%lld\n",result); 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 | #include<bits/stdc++.h> using namespace std; const long long mod=1000000000+7; long long dp[5000+69]; int arr[5000+69]; int main(){ int n,i,j,ma; long long result; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&arr[i]); sort(arr,arr+n); ma=arr[n-1]; dp[0]=1; for(i=0;i<n;i++){ for(j=ma;j>=arr[i]-1;j--) dp[min(ma,j+arr[i])]=(dp[min(ma,j+arr[i])]+dp[j])%mod; //for(j=0;j<=ma;j++) //printf("j:%d arr:%d dp:%lld\n",j,arr[i],dp[j]); } result=0; for(i=1;i<=ma;i++) result=(result+dp[i])%mod; printf("%lld\n",result); return 0; } |