제출 #991342

#제출 시각아이디문제언어결과실행 시간메모리
991342AndreyTrains (BOI24_trains)C++14
100 / 100
118 ms317804 KiB
#include<bits/stdc++.h> using namespace std; long long bruh[100001][400]; const long long MOD = 1e9+7; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); long long n,a,b; cin >> n; vector<pair<long long,long long>> haha(n+1); for(long long i = 0; i < n; i++) { cin >> a >> b; haha[i] = {a,b}; } reverse(haha.begin(),haha.end()); vector<long long> dp(n+1,1); dp[0] = 0; for(long long i = 0; i < 400; i++) { bruh[0][i] = 0; } for(long long i = 1; i <= n; i++) { a = haha[i].first; b = haha[i].second; if(a*a <= n) { if(i > a) { dp[i]+=bruh[i-a][a]; dp[i]%=MOD; } if(i > a*(b+1)) { dp[i]-=bruh[i-a*(b+1)][a]; dp[i]+=MOD; dp[i]%=MOD; } } else { for(long long j = i-a; j >= max(0LL,i-a*b); j-=a) { dp[i]+=dp[j]; dp[i]%=MOD; } } for(long long j = 1; j*j <= n; j++) { if(j <= i) { bruh[i][j] = (bruh[i-j][j]+dp[i])%MOD; } else { bruh[i][j] = dp[i]; } } } cout << dp[n]; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...