题面

经典的线性 \(\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\) 。

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

转移可以参考代码。

  1. #include <bits/stdc++.h>
  2. #define DEBUG fprintf(stderr, "Passing [%s] line %d\n", __FUNCTION__, __LINE__)
  3. #define itn int
  4. #define gI gi
  5. using namespace std;
  6. typedef long long LL;
  7. typedef pair <int, int> PII;
  8. typedef pair <int, PII> PIII;
  9. inline int gi()
  10. {
  11. int f = 1, x = 0; char c = getchar();
  12. while (c < '0' || c > '9') {if (c == '-') f = -1; c = getchar();}
  13. while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  14. return f * x;
  15. }
  16. const int maxn = 33;
  17. int n, m, k, s[maxn];
  18. LL dp[maxn][maxn][maxn][maxn][maxn];
  19. int main()
  20. {
  21. //freopen(".in", "r", stdin);
  22. //freopen(".out", "w", stdout);
  23. while (1)
  24. {
  25. n = gi();
  26. if (n == 0) break;
  27. memset(s, 0, sizeof(s));
  28. for (int i = 1; i <= n; i+=1) s[i] = gi();
  29. //初始化
  30. memset(dp, 0, sizeof(dp));
  31. dp[0][0][0][0][0] = 1;
  32. //枚举每一排的人数
  33. for (int a = 0; a <= s[1]; a+=1)
  34. {
  35. for (int b = 0; b <= min(a, s[2]); b+=1)
  36. {
  37. for (int c = 0; c <= min(b, s[3]); c+=1)
  38. {
  39. for (int d = 0; d <= min(c, s[4]); d+=1)
  40. {
  41. for (int e = 0; e <= min(d, s[5]); e+=1)
  42. {
  43. LL &v = dp[a][b][c][d][e];
  44. //转移
  45. if (a && a - 1 >= b) v += dp[a - 1][b][c][d][e];
  46. if (b && b - 1 >= c) v += dp[a][b - 1][c][d][e];
  47. if (c && c - 1 >= d) v += dp[a][b][c - 1][d][e];
  48. if (d && d - 1 >= e) v += dp[a][b][c][d - 1][e];
  49. if (e) v += dp[a][b][c][d][e - 1];
  50. }
  51. }
  52. }
  53. }
  54. }
  55. //输出结果
  56. printf("%lld\n", dp[s[1]][s[2]][s[3]][s[4]][s[5]]);
  57. }
  58. return 0;
  59. }

题解【AcWing271】杨老师的照相排列的更多相关文章

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

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

  2. Acwing-271-杨老师的照相排列(DP)

    链接: https://www.acwing.com/problem/content/273/ 题意: 杨老师希望给他的班级拍一张合照. 学生们将站成左端对齐的多排,靠后的排站的人数不能少于靠前的排. ...

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

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

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

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

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

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

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

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

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

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

  8. 观看杨老师(杨旭)Asp.Net Core MVC入门教程记录

    观看杨老师(杨旭)Asp.Net Core MVC入门教程记录 ASP.NET Core MVC入门 Asp.Net Core启动和配置 Program类,Main方法 Startup类 依赖注入,I ...

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

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

随机推荐

  1. MySQL第六课

    SELECT [DISTINCT]     * /{字段名1,字段名2,字段名3,.........} FROM 表名 [WHERE 条件表达式1] [GROUP BY 字段名[HAVING 条件表达 ...

  2. 剑指offer-面试题57_2-和为s的连续正数序列-穷举法

    /* 题目: 输入一个整数s,输出所有和为s的连续整数序列. */ /* 思路: 穷举法. */ #include<iostream> #include<cstring> #i ...

  3. kali2020更换中科大的更新源

    kali2020更换中科大的更新源 中科大的源地址 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib deb ...

  4. 一文看懂AI深度学习丨曼孚科技

    深度学习(Deep Learning)是机器学习的一种,而机器学习是实现人工智能的必经途径. 目前大部分表现优异的AI应用都使用了深度学习技术,引领了第三次人工智能的浪潮. 一. 深度学习的概念 深度 ...

  5. 吴裕雄--天生自然HADOOP操作实验学习笔记:tf-idf算法

    实验目的 通过实验了解tf-idf算法原理 通过实验了解mapreduce的更多组件 学会自定义分区,读写缓存文件 了解mapreduce程序的设计方法 实验原理 1.TF-IDF简介 TF-IDF( ...

  6. 【新人赛】阿里云恶意程序检测 -- 实践记录11.10 - XGBoost学习 / 代码阅读、调参经验总结

    XGBoost学习: 集成学习将多个弱学习器结合起来,优势互补,可以达到强学习器的效果.要想得到最好的集成效果,这些弱学习器应当"好而不同". 根据个体学习器的生成方法,集成学习方 ...

  7. 树莓派pip安装opencv报错,Could not find a version that satisfies the requirement cv2 (from versions: )No matching distribution found for cv2

    前言 我在使用pip install opencv-python 时报错 Could not find a version that satisfies the requirement opencv ...

  8. Dom中的一些接口

    节点都是单个对象,有时需要一种数据结构,能够容纳多个节点.DOM 提供两种节点集合,用于容纳多个节点:NodeList和HTMLCollection.这两种集合都属于接口规范.许多 DOM 属性和方法 ...

  9. Java中的isEmpty方法、null以及""的区别

    本文转自:https://blog.csdn.net/peng86788/article/details/80885814 这是一个比较容易混淆的概念,为了弄清楚这个问题,最好的方法当然是写程序来验证 ...

  10. 【剑指Offer】04、重建二叉树

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...