Acwing 271. 杨老师的照相排列

题意:

有n个数分别是从1到n,现在排成k排,每排分别有Ci个数,要求每排每列的都是从小到大,问有多少种方案

题解:

因为每行每列都是单调的,因此我们可以从小到大一次考虑1 ~ n的位置。在任意时刻,已经安排好的位置的数在每一行都是递增关系的(因为我们是从小到大的安排),每个数都插在队尾。我们用一个5元组来表示每行的人数,(a1,a2,a3,a4,a5),ai表示第i行已经安排好的人数,当此时考虑下一步(即再安排一个新人时),我们考虑所有满足如下条件的行号i:

  1. ai<Ci
  2. i=1或ai−1>aia_{i-1}>a_{i}ai−1​>ai​

从上往下考虑,如果当前行未满,并且当前行人数小于上一行。(如果上一行人数比本行小,那应该优先放在上一行,记住我们是从小到大放置,所以必须顺序放,不然无法保证单调性)
如果满足条件,就对该行进行转移,该行人数+1,加上上一个状态的方案。

我们不需要关心(a1,a2,a3,a4,a5)这些已经排好的具体方案,其描述的轮廓内的合影方案总数就构成一个子问题。
注意直接开数组会爆,使用动态开数组

代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\n",a,b);
typedef long long ll;
using namespace std;
//Fe~Jozky
const ll INF_ll=1e18;
const int INF_int=0x3f3f3f3f;
inline ll read(){ll s=0,w=1ll;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1ll;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10ll+((ch-'0')*1ll),ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
void rd_txt(){#ifdef ONLINE_JUDGE#elsefreopen("in.txt","r",stdin);#endif
}
int k;
int a[10];
int main()
{//rd_txt();while(cin>>k){if(k==0)break;a[1]=a[2]=a[3]=a[4]=a[5]=0;for(int i=1;i<=k;i++){cin>>a[i];}unsigned int f[a[1]+2][a[2]+2][a[3]+2][a[4]+2][a[5]+2];memset(f,0,sizeof(f));f[0][0][0][0][0]=1;for(int i1=0;i1<=a[1];i1++){for(int i2=0;i2<=a[2];i2++){for(int i3=0;i3<=a[3];i3++){for(int i4=0;i4<=a[4];i4++){for(int i5=0;i5<=a[5];i5++){unsigned int x=f[i1][i2][i3][i4][i5];if(i1<a[1])f[i1+1][i2][i3][i4][i5]+=x;if(i2<a[2]&&i2<i1)f[i1][i2+1][i3][i4][i5]+=x;if(i3<a[3]&&i3<i2)f[i1][i2][i3+1][i4][i5]+=x;if(i4<a[4]&&i4<i3)f[i1][i2][i3][i4+1][i5]+=x;if(i5<a[5]&&i5<i4) f[i1][i2][i3][i4][i5+1]+=x;}}}}}cout<<f[a[1]][a[2]][a[3]][a[4]][a[5]]<<endl;}return 0;}

Acwing 271. 杨老师的照相排列相关推荐

  1. AcWing 271. 杨老师的照相排列【多维DP】

    271. 杨老师的照相排列 - AcWing题库 题意: 在合影时要求每一排从左到右身高递减,每一列从后到前身高也递减. 问一共有多少种安排合影位置的方案 思路: 精华: 模拟操作,只有模拟出来操作, ...

  2. DP 杨老师的照相排列 、矩阵

    杨老师的照相排列 输入样例: 1 30 5 1 1 1 1 1 3 3 2 1 4 5 3 3 1 5 6 5 4 3 2 2 15 15 0 输出样例: 1 1 16 4158 141892608 ...

  3. 罗杨老师带你了解谷歌编程之夏(GSoC)活动全流程

    罗杨老师带你了解谷歌编程之夏(GSoC)活动全流程 为了帮助同学们更好地参与开源,Casbin 决定做一期访谈节目,由小编作为一名开源初学者,用访谈的形式与北京大学工学博士.Casbin作者.Npca ...

  4. 杨老师课堂之网页制作HTML的学习入门-含有案例

    网页制作入门 - Html的学习 本篇所授任务 网站信息页面案例 网站图片信息页面案例 网站友情链接页面案例 网站首页案例 网站注册页面案例 网站后台页面案例 教学导航 教学目标 了解什么是标记语言 ...

  5. 《从菜鸟到大师-杨老师课程笔记》Python工程师之 01

    文章目录 一.文章出处 二.基础语法 2.变量与常量 3.输入与输出 4.赋值与表达式 四.数据类型 1.数字类型 2.字符串类型 3.列表类型 4.元组类型 5.字典类型 五.字符串操作 一.文章出 ...

  6. 计算区间素数和,杨老师正在上《离散数学》课程的“数论”内容,讲授素数的知识。素数又称为质数。一个大于1的整数p是素数,当且仅当p只能被1和自身整除。很显然,2是最小的素数。他想设计一个程序

    杨老师正在上<离散数学>课程的"数论"内容,讲授素数的知识.素数又称为质数.一个大于1的整数p是素数,当且仅当p只能被1和自身整除.很显然,2是最小的素数.他想设计一个 ...

  7. 台州杨老师课堂 UI设计培训班

    课程内容 一.图形界面设计基础 1.Photoshop 应用 通过各种不同风格网页整体GUI设计,掌握photoshop相关软件操作基础,熟练使用更重要是学会直接应用软件,通过项目实训直接设计. 2. ...

  8. 杨老师:Visual C++ 中操纵 MS Word 123

    对杨老师佩服不已! 又搜到他写的<Visual C++ 中操纵 MS Word 123>.在源代码中,介绍了我一直不太摸得着头脑的CComVariant, COleVariant, _va ...

  9. 杨老师数据结构栈笔记

    杨老师b站视频如下,作为数据结构初学者收益很大,值得推荐:2 数据结构导论_哔哩哔哩_bilibili .h文件类型定义 #ifndef MY_SEQSTACK_H #define MY_SEQSTA ...

最新文章

  1. git revert 的问题
  2. Matlab——GUI程序操作说明
  3. 一种求凸多边形内部似最大圆的算法
  4. 设计师必读的15个响应式网页设计教程
  5. java高端架构_Java高端架构师
  6. Android 系统(197)---USB VID
  7. css权威指南第四版_16个非常有用的CSS伪选择器,你千万不要错过了!
  8. Window 的版本号管理策略
  9. excel自动导出功能_自动关联数据字典---SpringCloud Alibaba_若依微服务框架改造---工作笔记008
  10. 两台服务器身份验证,OAuth 2 从入门到精通(一) - 身份认证服务器
  11. Vmware 虚拟机安装教程
  12. 他是中国最牛X的黑客,曾让6个国家束手无策,却被怀疑是精神病
  13. 慕课软件工程(第五章.初始模块结构图的设计)
  14. Linux触摸板设置
  15. 理想国pandas练习题4
  16. Word不能编辑文档怎么办,文档修改了不能保存怎么办
  17. 不一样的蓝牙连接方式——C#程序实现蓝牙通信
  18. 微信摇一摇插件ios_iOS摇一摇
  19. HTML网页设计基础期末作业——仿Coco线上订奶茶饮料网站设计与实现6个页面(HTML+CSS+JavaScript)...
  20. css div水平垂直居中

热门文章

  1. 法国一家夜总会上演机器人钢管舞
  2. 春节特惠活动┃一张纸一幅图,竟然提高了10倍的学习和工作效率!?
  3. php 版本排序,四种常见排序算法--PHP版本
  4. java里面什么时候环境变量_Java的环境变量什么时候需要设置?
  5. angular的html引入js,在AngularJS中的文件夹中加载JavaScript和CSS文件
  6. mysql数据压缩存储_压缩文本,然后存储在mysql数据库中
  7. easyui数据请求两个url_jQuery Easyui datagrid连续发送两次请求问题
  8. ajax 偶尔302,关于Ajax 中response出现302的一点见解
  9. python notebook右侧网页_《Python web开发》笔记 一:网页开发基础
  10. yum java 1.7_centos通过yum安装jdk1.7或1.8