0%

The 2024 Shanghai Collegiate Programming Contest G. 象棋大师(计数状元dp)

思路讲解

因为方向是确定的,可以从前往后推导。

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
27
28
29
30
for(int s=cnts-1;s>=0;--s){
for(int i=0;i<=N;++i){
for(int j=0;j<=N;++j){
if(danger[s][i][j]) continue; // danger,continue
bitset<15> bi(s);
// set<array<ll,2> > mas;
// for(int k=0;k<M;++k){if(bi[k]) mas.insert(ma[k]);}
for(int k=0;k<2;++k){
ll u=i+di[k],v=j+dj[k];
if(u<0 || u>N) continue;
if(v<0 || v>N) continue;
if(danger[s][u][v]) continue;
ll idx=-1;
for(int l=0;l<M;++l){
if(ma[l][0]==u && ma[l][1]==v && bi[l]){idx=l;break;}
}
if(idx!=-1){
if(danger[s-(1<<idx)][u][v]) continue;
dp[s-(1<<idx)][u][v]+=dp[s][i][j];
dp[s-(1<<idx)][u][v]%=mod;
}else{
dp[s][u][v]+=dp[s][i][j];
dp[s][u][v]%=mod;
}

}

}
}
}

AC代码

327ms

https://codeforces.com/gym/105229/my

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

TLE,set常数太大。