P1350 车的放置

P1350 车的放置

设$f[i][j]$为当前推到第$i$列,该列高度$h$,已经放了$j$个车的方案数

则$f[i][j]=f[i-1][j]+f[i-1][j-1]*(h-j+1)$

但是我们发现从左往右递推的话因为突然少掉一块,所以无法正常进行

那么从右往左就行了鸭!

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #define re register
 5 using namespace std;
 6 #define N 2002
 7 const int mod=1e5+3;
 8 int f[N][N],a,b,c,d,k;
 9 int main(){
10     scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);
11     for(int i=0;i<=a+c;++i) f[i][0]=1;
12     for(int i=1;i<=c;++i)//从右向左
13         for(int j=1;j<=k;++j)
14             f[i][j]=(f[i-1][j]+f[i-1][j-1]*(d-j+1))%mod;
15     for(int i=c+1;i<=a+c;++i)
16         for(int j=1;j<=k;++j)
17             f[i][j]=(f[i-1][j]+f[i-1][j-1]*(b+d-j+1))%mod;
18     printf("%d",f[a+c][k]);
19 }
View Code
原文地址:https://www.cnblogs.com/kafuuchino/p/9904301.html