P1350
dp。
先把这个图像左右反转一下,这样方便dp
f[j][i]代表前j列放i个的方案;
v[j]代表第j列的高度;
f[j][i]=(f[j-1][i]+f[j-1][i-1]*(v[j]-i+1))%mo;
答案就是f[a+c][m]
#include<bits/stdc++.h>
using namespace std;
int f[2005][2005],v[2005];
int a,b,c,d,m,ans;
int main(){
scanf("%d%d%d%d%d",&a,&b,&c,&d,&m);
for(int i=1;i<=c;i++)v[i]=d,f[i][0]=1;
for(int i=1;i<=a;i++)v[c+i]=d+b,f[c+i][0]=1;
f[0][0]=1;
for(int j=1;j<=a+c;j++)for(int i=1;i<=m;i++)f[j][i]=(f[j-1][i]+f[j-1][i-1]*(v[j]-i+1))%100003;
printf("%d",f[a+c][m]);
}

浙公网安备 33010602011771号