一转眼,已经停课五天了。
高二大佬们已经都走了,在机房里面呆着,有时感觉很孤寂。
但是为了能学好竞赛,这些都是在所不惜的。
好像多打打比赛啊,可是cf要FQ,洛谷之类的比赛还不勤。
哎,先去学一发SPFA
dsfz 周四考试第二题dp
题面有错
for(int i=n-1;i>=1;i--){
dp[i][a[i]-1]=(dp[i+1][a[i]]+a[i]*dp[i+1][a[i]-1])%mod;
dp[i][a[i]]=(a[i]*dp[i+1][a[i]-1]+dp[i+1][a[i]])%mod;
}
这是dp试(从后往前推会好一点吧) 因为对于每一个,a[i]成立的情况,无非两种,即前面+a[i]或a[i]-1;
而如果+a[i]-1则在i处必须开一个以i为左端点的区间就转化成了+a[i]的情况
而对于+a[i] 又分为两种情况,有括回,无括回。
有括回 会有a[i]种情况,对答案的贡献为a[i]*dp[i+1][a[i]-1]
无括回 dp[i+1][a[i]]
别忘了边缘要特判
if
(a[n]>1){
cout<<0;
return
0;
}
dp[n][0]=1;
if
(a[n]==1)dp[n][1]=1;