codeforces1485 F. Copy or Prefix Sum(dp)
7112 단어 Codeforcesdp
F. Copy or Prefix Sum
Venice technique 간략함은 게으름 표기 사상이다.접두사와 수조가 원수조와 일일이 대응하기 때문에 여기서 우리는 ai 를 선택합니다i ai의 접두사와 그룹의 방안 수 (아래 a i a i ai는 원제 그룹의 접두사와)
원제의 두 가지 조건을 알기 어렵지 않다
상태 표시: f i, j f{i, j}fi, j는 전 ii 개수를 고려하고 구한 수조 ii 개 위치값은 jj의 방안수입니다.정답: ∑j=-3-∞+∞fn,j\sum{j=-\infty}^{+\infty}f_{n,j} ∑j=−∞+∞fn,j
상태 전환:
a i = b i + a i − 1 a_i=b_i+a_{i-1} ai = bi +ai -3 - 1과 a i = b i ai=b_i ai = bi da a i -3 - 1 = 0 a{i-1}=0 ai -3.1=0은 같은 상황이기 때문에 중복 계산을 제거해야 한다.
상술한 전이 방식에 따라 틀림없이 믿을 수 없을 것이다. 1차는 스크롤 수조로 최적화할 수 있음을 발견하기 어렵지 않다. 첫 번째 전이 식에 주의하면 전체 수조를 bib 로 평이하게 이동하는 것과 같다.ibi, 여기서 채택한 게으름 표기 사상은 아래 표시를 한다.
첫 번째 이동에 대해dd,fi,j=fi-3-1,j-3bi=fi-3-1,j+ad df 유지 보수{i,j}=f_{i-1,j-b_i}=f_{i-1, j+add} fi, j=fi -3 1, j -3 bi =fi -3 1, j+add, 매번add에서 bi b 를 빼면ibi는 수조에 대한 평이 조작, 즉 첫 번째 이동을 완성했다.
다음 중 하나는 원래 bi b 를 기억하기만 하면 된다i bi의 위치는 b i + a d bi+add bi+add 로 이동 가능
#define IO ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr)
#pragma GCC optimize(2)
#include
#include
#include
using namespace std;
using ll=long long;
constexpr int N=100010;
constexpr ll mod=1e9+7;
int n;
map<ll,ll> dp;
int main()
{
IO;
int T=1;
cin>>T;
while(T--)
{
cin>>n;
dp.clear();
dp[0]=1;
ll sum=1,add=0;
for(int i=1;i<=n;i++)
{
ll b;cin>>b;
ll pre=sum-dp[0+add]; pre=(pre%mod+mod)%mod;
add-=b;
sum+=pre; sum%=mod;
dp[b+add]+=pre; dp[b+add]%=mod;
}
cout<<sum<<'
';
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
CF1303E - Erase Subsequences DP문자열의 길이를 보면 O(N3)O(N^3)O(N3)O(N3)의 가장 직접적인 생각은 tt열을 두 부분으로 나누어 t1, t2t1, t2t1, t2t1, t2t2, 그리고 ss열을 매칭하는 것이다. t2는 같은 문자를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.