链接:

https://www.acwing.com/problem/content/273/

题意:

杨老师希望给他的班级拍一张合照。

学生们将站成左端对齐的多排,靠后的排站的人数不能少于靠前的排。

例如,12名学生(从后向前)可以排列成每排5,3,3,1人,如下所示:

X X X X X

X X X

X X X

X

同时,杨老师希望同行学生身高从左到右依次降低,同列学生身高从后向前依次降低。

还以12名学生为例,给学生们编号(号码越小代表身高越高)后,按照此规则可进行如下两种安排:

1 2 3 4 5 1 5 8 11 12

6 7 8 2 6 9

9 10 11 3 7 10

12 4

杨老师希望知道给定每排的人数,在满足规则的情况下,一共能有多少种位置安排。

例如,规定一共三排,每排3,2,1人,则共有16种安排方法如下:

123 123 124 124 125 125 126 126 134 134 135 135 136 136 145 146

45 46 35 36 34 36 34 35 25 26 24 26 24 25 26 25

6 5 6 5 6 4 5 4 6 5 6 4 5 4 3 3

现在请你编写一个程序,确定在给定每排人数的情况下,不同安排的数量。

思路:

建立DP[i][j][k][l][m],表示每一行站了i,j,k,l,m个人时的排列种数.

可以有第一行开始往后推,当某行人数少一个时依然大于等于前一行就可以将少一个人的状态转移过来.

注意输入是从后往前输入的

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL; LL Dp[35][35][35][35][35];
int a[10];
int k; int main()
{
while (~scanf("%d", &k) && k)
{
memset(a, 0, sizeof(a));
memset(Dp, 0, sizeof(Dp));
for (int i = k;i >= 1;--i)
scanf("%d", &a[i]);
Dp[0][0][0][0][0] = 1;
for (int i = 0;i <= a[1];i++)
{
for (int j = 0;j <= a[2];j++)
for (int x = 0;x <= a[3];x++)
for (int y = 0;y <= a[4];y++)
for (int z = 0;z <= a[5];z++)
{
if (i-1 >= 0)
Dp[i][j][x][y][z] += Dp[i-1][j][x][y][z];
if (j-1 >= 0 && j-1 >= i)
Dp[i][j][x][y][z] += Dp[i][j-1][x][y][z];
if (x-1 >= 0 && x-1 >= j)
Dp[i][j][x][y][z] += Dp[i][j][x-1][y][z];
if (y-1 >= 0 && y-1 >= x)
Dp[i][j][x][y][z] += Dp[i][j][x][y-1][z];
if (z-1 >= 0 && z-1 >= y)
Dp[i][j][x][y][z] += Dp[i][j][x][y][z-1];
// cout << Dp[i][j][x][y][z] << endl;
}
}
printf("%lld\n", Dp[a[1]][a[2]][a[3]][a[4]][a[5]]);
} return 0;
}

Acwing-271-杨老师的照相排列(DP)的更多相关文章

  1. 271. 杨老师的照相排列【线性DP】

    杨老师希望给他的班级拍一张合照. 学生们将站成左端对齐的多排,靠后的排站的人数不能少于靠前的排. 例如,12名学生(从后向前)可以排列成每排5,3,3,1人,如下所示: X X X X X X X X ...

  2. 题解【AcWing271】杨老师的照相排列

    题面 经典的线性 \(\text{DP}\) . 设 \(dp_{a,b,c,d,e}\) 表示第 \(1\) 排有 \(a\) 个人,第 \(2\) 排有 \(b\) 个人, 第 \(3\) 排有 ...

  3. 新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛)C 勤奋的杨老师【DP/正反LIS/类似合唱队形】

    链接:https://www.nowcoder.com/acm/contest/116/C 来源:牛客网 题目描述 杨老师认为他的学习能力曲线是一个拱形.勤奋的他根据时间的先后顺序罗列了一个学习清单, ...

  4. 新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛)- 勤奋的杨老师(最长递增子序列)

    链接:https://www.nowcoder.com/acm/contest/116/C来源:牛客网 题目描述 杨老师认为他的学习能力曲线是一个拱形.勤奋的他根据时间的先后顺序罗列了一个学习清单,共 ...

  5. COJ 0500 杨老师的路径规划(MST)最小生成树

    杨老师的路径规划(MST) 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 为满足同学们需求,杨老师在实验楼4层新建了好多个计算 ...

  6. Final互评------《弹球学成语》---- 杨老师粉丝群

    一.基于NABCD评论作品,及改进建议 1.根据(不限于)NABCD评论作品的选题;  N(Need,需求):本产品面相青少年及小学生,基于这些用户数量再加上一些休闲玩家,需求量还是比较大的.   A ...

  7. Final版本互评——杨老师粉丝群《PinBall》

    基于NABCD评论作品,及改进建议 1.根据(不限于)NABCD评论作品的选题 (1)N(Need,需求) 随着民族自信的觉醒,民主文化越来越受到重视,语文在高考中的比重也不断增加,在这种大环境下,成 ...

  8. 互评Beta版本——杨老师粉丝群——Pinball

    互评beta版本    杨老师粉丝群——<PinBall> 一.基于NABCD评论作品,及改进建议 1.根据(不限于)NABCD评论作品的选题 (1)N(Need,需求) 随着年龄的增长, ...

  9. 互评Alpha版本——杨老师粉丝群——Pinball

    一.基于NABCD评论作品,及改进建议 1.根据(不限于)NABCD评论作品的选题 (1)N(Need,需求) 成语学习对除汉语言专业外的大学生的需求并不是很高,初中生和高中生因为在升学时需要参加语文 ...

随机推荐

  1. DNS简单搭建

    一.安装服务 设置主机名 [root@localhost named]# hostnamectl set-hostname k1.kk.cn [root@localhost named]# bash ...

  2. 5分钟快速安装Redmine项目管理软件

    公司还在使用Excel.project.word来管理项目吗?时间一长.项目参与的人多.就出现了断断续续无法连续跟踪的问题.终于忍受不了公司这种陈旧的项目管理手段了,于是花了一些时间研究了市面上常见的 ...

  3. 【JulyEdu-Python基础】第 1 课:入门基础

    一些学习资源的收集: 可汗学院 视频 公开课 Grossin 编程教室: 一个非常简单,对初学者非常友好的教程和在线联系 廖雪峰教程 书籍: Python核心编程: 这本书应该是最清楚.最深入全面的书 ...

  4. 瀑布布局(waterflall flow)实现

    瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动.这种布局还会不断加载数据块并附加至当前尾部.最早采用此布局的网站是Pinterest,逐渐 ...

  5. 防火墙(入站规则)C++修改方法 以解决服务器无法连接问题

    为啥要关注防火墙 今天项目中的p2p直连遇到了问题.经过排查,发现充当服务器的一端进入listen状态后,另外的客户端一端connect失败. 错误码10060(超时). 开始时怀疑客户端connec ...

  6. 查找担保圈-step1-担保圈表函数

    USE [test]; GO /****** Object: UserDefinedFunction [dbo].[f_findrecycle] Script Date: 2019/7/8 14:37 ...

  7. Centos7环境下Docker容器的安装与卸载

    Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare metal. ...

  8. Visual Studio (VC) Win32 程序由于数据大,内存溢出怎么办?

    Visual Studio (VC) 内编写的Win32 程序由于数据大,内存溢出,即使转移到64位系统也不行.在国外网站上找到了答案. 原来,只需在project->property中的Lin ...

  9. 问题:tomcat启动后,可以访问主页面,但是无法访问dubbo-admin

    原因分析: 直接查看logs中的日志文件,发现一行 [Catalina-utility-1] org.apache.catalina.startup.HostConfig.undeploy Undep ...

  10. Linux使用Docker启动Elasticsearch并配合Kibana使用,安装ik分词器

    注意事项 这里我的Linux虚拟机的IP地址是192.168.1.3 Docker运行Elasticsearch容器之后不会立即有反应,要等一会,等待容器内部启动Elasticsearch,才可以访问 ...