20201006国庆day4
T1:
#include<bits/stdc++.h>
using namespace std;
const int N=25010;
const int K=30;
const int MOD=1e9+7;
int f[N][K][K][2],g[N][K][K][2],n,k;
int R[N][K],L[N][K],tmp[K][2],pos[N],h[N];
void update(int &x,int y) {
x+=y;
if(x>=MOD)x-=MOD;
}
void work(int f[N][K][K][2],int L[N][K]) {
L[0][1]=0;
for(int i=1; i<=n; i++) {
int cnt=0,j=1;
for(; j<=k+1&&j<=i&&L[i-1][j]>=h[i]; L[i][++cnt]=L[i-1][j++]);
if(cnt<=k+1)L[i][++cnt]=h[i],pos[i]=cnt;
for(; j<=k+1&&j<=i&&cnt<=k+1; L[i][++cnt]=L[i-1][j++]);
}
f[0][1][0][0]=1;
for(int i=0; i<n; i++)
for(int x=1; x<=k+1; x++)
if(x<=i+1)
for(int j=0; j<=k; j++)
for(int tag=0; tag<2; tag++) {
if(L[i][x]<h[i+1]) {
update(f[i+1][pos[i+1]][j][tag],f[i][x][j][tag]);
if(j<k)update(f[i+1][x+1][j+1][tag^(L[i][x]&1)],f[i][x][j][tag]);
}
else {
update(f[i+1][x][j][tag^((L[i][x]-h[i+1])&1)],f[i][x][j][tag]);
if(j<k)update(f[i+1][x][j+1][tag^(L[i][x]&1)],f[i][x][j][tag]);
}
}
}
int main() {
scanf("%d%d",&n,&k);
for(int i=1; i<=n; i++)scanf("%d",&h[i]);
work(f,L);
reverse(h+1,h+n+1);//反转字符串
work(g,R);
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=k+1;j++)
for(int tag=1;tag<=2;tag++)
tmp[j-1][tag-1]=0;
for(int x=1;x<=k+1;x++)
if(x<=n-i+1&&L[n-i][x]<h[i])
for(int j=1;j<=k+1;j++)
for(int tag=1;tag<=2;tag++)
update(tmp[j-1][tag-1],f[n-i][x][j-1][tag-1]);
for(int x=1;x<=k+1;x++)
if(x<=i&&R[i-1][x]<=h[i])
for(int j=1;j<=k+1;j++)
for(int tag=1;tag<=2;tag++)
update(ans,1ll*g[i-1][x][j-1][tag-1]*tmp[k-(j-1)][tag-1]%MOD);
}
printf("%d\n",ans);
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!