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