0%

2025北京市赛-G. 萤火虫难题(转换状态设计思路,以倍数为核心)

思路讲解

那么首先相邻,状态转移只需要考虑最后一个(前缀dp)。

AC代码

https://qoj.ac/submission/1125813

心路历程(WA,TLE,MLE……)

https://qoj.ac/submission/1125736

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//        最大值       次大值
vector<ll> dp(mxw+5,0),dp2(mxw+5,0),col(mxw+5,0);
for(int i=1;i<=N;++i){
vector<ll> prs;
for(int j=W[i];j>1;j/=minp[j]){ // 素因数分解
ll p=minp[j];
prs.pb(p);
}
sort(all(prs));
prs.resize(unique(all(prs))-prs.begin());
for(auto p:prs){
if(col[p]!=C[i]){
dp2[p]=dp[p];
dp[p]+=1;
col[p]=C[i];
}else{
dp2[p]+=1;
}
}
}