题面

经典的线性 \(\text{DP}\) 。

设 \(dp_{a,b,c,d,e}\) 表示第 \(1\) 排有 \(a\) 个人,第 \(2\) 排有 \(b\) 个人, 第 \(3\) 排有 \(c\) 个人, 第 \(4\) 排有 \(d\) 个人, 第 \(5\) 排有 \(e\) 个人的方案数。

初始化 \(dp_{0,0,0,0,0}=1\) 。

可以发现一个性质:前排的人数一定比后排的人数多。

转移可以参考代码。

#include <bits/stdc++.h>
#define DEBUG fprintf(stderr, "Passing [%s] line %d\n", __FUNCTION__, __LINE__)
#define itn int
#define gI gi using namespace std; typedef long long LL;
typedef pair <int, int> PII;
typedef pair <int, PII> PIII; inline int gi()
{
int f = 1, x = 0; char c = getchar();
while (c < '0' || c > '9') {if (c == '-') f = -1; c = getchar();}
while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return f * x;
} const int maxn = 33; int n, m, k, s[maxn];
LL dp[maxn][maxn][maxn][maxn][maxn]; int main()
{
//freopen(".in", "r", stdin);
//freopen(".out", "w", stdout);
while (1)
{
n = gi();
if (n == 0) break;
memset(s, 0, sizeof(s));
for (int i = 1; i <= n; i+=1) s[i] = gi();
//初始化
memset(dp, 0, sizeof(dp));
dp[0][0][0][0][0] = 1;
//枚举每一排的人数
for (int a = 0; a <= s[1]; a+=1)
{
for (int b = 0; b <= min(a, s[2]); b+=1)
{
for (int c = 0; c <= min(b, s[3]); c+=1)
{
for (int d = 0; d <= min(c, s[4]); d+=1)
{
for (int e = 0; e <= min(d, s[5]); e+=1)
{
LL &v = dp[a][b][c][d][e];
//转移
if (a && a - 1 >= b) v += dp[a - 1][b][c][d][e];
if (b && b - 1 >= c) v += dp[a][b - 1][c][d][e];
if (c && c - 1 >= d) v += dp[a][b][c - 1][d][e];
if (d && d - 1 >= e) v += dp[a][b][c][d - 1][e];
if (e) v += dp[a][b][c][d][e - 1];
}
}
}
}
}
//输出结果
printf("%lld\n", dp[s[1]][s[2]][s[3]][s[4]][s[5]]);
}
return 0;
}

最新文章

  1. Python之路 day3 全局变量、局部变量
  2. position窗口居中
  3. linux学习笔记1
  4. 使用log4net连接Mysql数据库配置
  5. web页面的生命周期
  6. PV(访问量)、UV(独立访客)、IP(独立IP) (转)
  7. DotNetCore跨平台~EFCore连接Mysql的方式
  8. 【转】使用MySQL处理百万级以上数据时,不得不知道的几个常识
  9. 记录一次安装OpenGL的漫长过程
  10. cocos2dx 编译遇到资源里有.svn文件不能删除报错的问题
  11. Day36 数据库的操作
  12. 如何使用SVN
  13. 软件魔方制作系统启动盘并安装win8系统
  14. MapReduce 基础学习
  15. linux 系统启动
  16. linux禁ping与限制ip登录
  17. P2574 XOR的艺术
  18. 问题:oracle floor;结果:Oracle的取整和四舍五入函数——floor,round,ceil,trunc使用说明
  19. 宽字符wchar_t和窄字符char区别和相互转换
  20. SQLSERVER编译与重编译

热门文章

  1. 硬件知识整理part1--电阻E系列行业规范
  2. 【架构篇】ASP.NET Core 基于 Consul 动态配置热更新
  3. 通过CSS3属性值的变化实现动画效果+触发这些动画产生交互
  4. SVN使用经验
  5. ES的性能优化
  6. Nginx配置HTTPS并将HTTP请求重定向到HTTPS
  7. warning Attribute &#39;showExpand&#39; must be hyphenated
  8. 使用resultMap实现高级结果映射
  9. javascript当中onload用法
  10. 正则表达式[\w]+,\w+,[\w+]