This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define int long long
int N;
const int MOD = 1e9+7;
vector<int> fib;
void calc_fib(int n){
int cur=1;
int prev= 1;
for(int i = 0; i<n;i++){
fib.push_back(cur);
int next = cur+prev;
prev = cur;
cur = next;
}
}
const int MAX_S = 100000;
const int K= 25;
signed main(){
cin>>N;
vector<int> a(N);
for(int i = 0; i<N; i++){
cin>>a[i];
}
calc_fib(K);
vector<vector<int>> dp(MAX_S, vector<int>(K+1, 0));
for(int cur_s= 0; cur_s<MAX_S; cur_s++){
for(int cur_fib= 0; cur_fib<=K;cur_fib++){
if(cur_s == 0 && cur_fib==0){
dp[0][0]=1;
}
else{
if(cur_fib>0){
dp[cur_s][cur_fib] =(dp[cur_s][cur_fib]+dp[cur_s][cur_fib-1])%MOD;
}
if(cur_fib>0 && cur_s>=fib[cur_fib-1]){
dp[cur_s][cur_fib] = (dp[cur_s][cur_fib]+dp[cur_s-fib[cur_fib-1]][cur_fib-1])%MOD;
}
}
}
}
int pref= 0;
for(int i = 0; i<N; i++){
pref += fib[a[i]-1];
//cout<<pref<<endl;
cout<<dp[pref][K]<<endl;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |