题解 P1350 【车的放置】

· · 题解

..... .. 额,这个就是dp啊;

思路和p1240 是很像的;

我先把这个图像左右反转一下,这样方便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;
const int N=2e3+5;
int f[N][N],v[N];
int a,b,c,d,m,ans,mo=100003;
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))%mo;
    printf("%d",f[a+c][m]);
}