照相过程中 给定每排的人数 要求后面比前面高 左边比右边高 后面一排比前边一排人多 求解总的方案数
f[0][0][0][0][0]=1;
for(int i=1;i<=a[1];i++)
for(int j=0;j<=min(i,a[2]);j++)
for(int k=0;k<=min(j,a[3]);k++)
for(int l=0;l<=min(k,a[4]);l++)
for(int p=0;p<=min(l,a[5]);p++)
{
ll &x=f[i][j][k][l][p];
if(i-1>=j) x+=f[i-1][j][k][l][p];
if(j-1>=k) x+=f[i][j-1][k][l][p];
if(k-1>=l) x+=f[i][j][k-1][l][p];
if(l-1>=p) x+=f[i][j][k][l-1][p];
if(p) x+=f[i][j][k][l][p-1];
}
printf("%lld\n",f[a[1]][a[2]][a[3]][a[4]][a[5]]);
- 动态规划要注意的三个要素: 转移方程 初始状态 目标状态
- 对于每次次循环 每一个引用 都要注意是不是合法
- KB是千字节 不是千bit
- 检查两个地方: 一个是思路 第二个是变量名的对应关系