首页 > 其他分享 >SP15637 GNYR04H - Mr Youngs Picture Permutations(线性 dp)

SP15637 GNYR04H - Mr Youngs Picture Permutations(线性 dp)

时间:2023-11-07 21:11:25浏览次数:29  
标签:Picture int Permutations Youngs geqslant re 保证 单调 dp

题目

求方案数,考虑 dp

—— 状态设计和边界 ——

题目告诉了一个很显然的性质:

  • 每一排从左至右保证高度单调递减
  • 每一列从后往前保证高度单调递减

那么可以发现,对于每一行,每一列,一定是按高度顺序插入,并且是连续插入,因为如果不连续,就无法保证单调递减的性质

同时,它给出了另一个性质 : \(N_1 \geqslant N_2 \geqslant \cdots \geqslant N_k\) (\(k\) 排, \(N_i\) 为每排长度)

可以总结出,它总是满足这样一个轮廓:

image

可以设计状态维护这个东西,考虑 \(k\in[1,5]\) ,

则定义 \(f_{a,b,c,d,e}\) 表示 1 ~ 5 行分别的同学数为 a ~ e 时的方案数。

边界:当没有同学时,显然是一种方案,即 \(f_{0,0,0,0,0} = 1\) .

—— 状态转移方程 ——

考虑当前状态 \(f_{a,b,c,d,e}\) 可以由插入 a ~ e 中任意一个转移过来,但要保证后一排的长度不小于前一排这一前提,则有:

\[f_{a,b,c,d,e} = f_{a,b,c,d,e}~ + \begin{cases} f_{a-1,b,c,d,e}&a>0,a-1\geqslant b \\f_{a,b-1,c,d,e}&b>0,b-1\geqslant c \\f_{a,b,c-1,d,e}&c>0,c-1\geqslant d \\f_{a,b,c,d-1,e}&d>0,d-1\geqslant e \\f_{a,b,c,d,e-1}&e>0 \end{cases}\]

—— 阶段和答案 ——

暴力枚举五层的数量,同时注意对于 2 ~ 5 层,要保证长度不大于前一层,取个 min 就可以了。

由于是求累加的方案数,那么答案肯定是出现在最大集合,即 \(f_{N_1,N_2,N_3,N_4,N_5}\)

—— 时间复杂度 ——

数据这么小,没必要算什么复杂度了吧 qwq

#include <bits/stdc++.h>
#define re register int
#define min(x, y) (x < y ? x : y)
using namespace std;
typedef long long ll;
const int N = 31;
int n, h[10];
ll f[N][N][N][N][N];

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	
	while (cin >> n, n)
	{
		memset(f, 0, sizeof f);
		memset(h, 0, sizeof h);
		
		for (re i = 1; i <= n; i ++) cin >> h[i];
		f[0][0][0][0][0] = 1;
		for (re a = 0; a <= h[1]; a ++)
			for (re b = 0; b <= min(h[2], a); b ++)
				for (re c = 0; c <= min(h[3], b); c ++)
					for (re d = 0; d <= min(h[4], c); d ++)
						for (re e = 0; e <= min(h[5], d); e ++)
						{
							ll val = f[a][b][c][d][e];
							if (a && b <= a - 1) val += f[a - 1][b][c][d][e];
							if (b && c <= b - 1) val += f[a][b - 1][c][d][e];
							if (c && d <= c - 1) val += f[a][b][c - 1][d][e];
							if (d && e <= d - 1) val += f[a][b][c][d - 1][e];
							if (e) val += f[a][b][c][d][e - 1];
							f[a][b][c][d][e] = val;
						}
		cout << f[h[1]][h[2]][h[3]][h[4]][h[5]] << '\n';
	}
	return 0;
}

标签:Picture,int,Permutations,Youngs,geqslant,re,保证,单调,dp
From: https://www.cnblogs.com/hi-zwjoey/p/17816021.html

相关文章

  • CF213E Two Permutations
    CF213ETwoPermutations题解下文的\(a+x\)表示\(a_1+x,a_2+x,...a_n+x\)这个序列。发现\(n,m\)不大,所以可以枚举\(x\),然后快速判断是否合法。考虑如何快速判断一个\(x\)是否合法。注意到\(a,b\)都是排列。\(a_1+x,a_2+x,...a_n+x\)的数在\([1+x,n+x]\)范围内......
  • 「CF715E」Complete the Permutations
    \(\text{「CF715E」CompletethePermutations}\)\(\text{Link}\)\(\text{Describe}\)给定长为\(n\)的且部分确定的置换\(p,q\)。定义\(p,q\)距离为通过交换\(p\)任意两项变为\(q\)的最小步数,对于\(0\lek\len-1\)求通过补全\(p,q\)使得\(p,q\)距离为\(k\)的......
  • #dp,二项式反演,容斥#CF285E Positions in Permutations
    题目问有多少个长度为\(n\)的排列\(P\)满足\(|P_i-i|=1\)的\(i\)的个数恰好为\(k\)个分析设\(dp_{i,j,k}\)表示前\(i\)个数钦定\(j\)个数满足上述条件且现在\(i\)和\(i+1\)因此被占用的方案数。那么第\(i\)个满足上述条件无非就是放入\(i-1\)或者\(......
  • Codeforces Round 884 (Div. 1 + Div. 2) B. Permutations & Primes
    给一个正整数\(n\),你需要构造一个\(n\)的排列\(p_1,p_2,\cdots,p_n\)。对于排列\(p\)的每个子段\([l,r]\),\(mex_{i=l}^{r}a_i\)的结果为质数的次数尽可能多。此处的\(mex\)最小排除值最低为\(1\)而非\(0\)。不难想到,小质数\(2,3\)容易构造。于是有......
  • VBA Picture Copy&Paste
    setmyshapes=.worksheets(1).shapes(“1”)myshapes.CopyPictureAppearance:=xlScreen,Format:=xlPictureThisWorkbook.Worksheets("Sheet3").PasteDestination:=ThisWorkbook.Worksheets("Sheet3").Cells(s,c)``SubpictureCV()Application.Scr......
  • CF882E1+CF1882E2 Two Permutations 题解-构造题
    CF882E1+CF1882E2TwoPermutations题解-构造题哇,人类智慧,太智慧了。。。此题作为20231010联考的T3。感觉赛时根本没有去往这方面想。CF1882E1CF1882E2E1是简单版,就是没有要求操作数最小化。E1-EasyVersion方法1首先考虑没有次数限制的,对于单独的每一个串的情况。......
  • CodeForces 1882E2 Two Permutations (Hard Version)
    洛谷传送门CF传送门如何评价,模拟赛搬了一道,前一天晚上代码写了一半的题。考虑如何让操作次数最小。发现直接做太困难了。根本原因是,一次操作对序列的影响太大了。考虑做一些转化,减少一次操作对序列的影响。仍然先考虑一个排列怎么做。不知道为什么可以想到在排列前面添加特......
  • MPEG(Moving Picture Experts Group)协议发展史
    MPEG(MovingPictureExpertsGroup)是一个国际标准化组织,致力于制定数字多媒体编码标准。MPEG协议的发展史可以追溯到20世纪80年代初。以下是MPEG协议的主要发展历程:MPEG-1:发布时间:1993年MPEG-1是MPEG协议的第一个版本,主要用于压缩视频和音频。它最著名的应用之一是VideoCD(VCD),这是......
  • CF1677D Tokitsukaze and Permutations
    好玩题。对于一个排列\(p\),进行\(k\)轮冒泡,记\(v_i=\sum_{j<i}[p_j<p_i]\),给定\(v_i\),部分值不确定,求合法的\(p\)的个数。\(p\)由\(v\)唯一确定。考虑一个个加数字进去,每次可以判断加入数字与前面数字的相对大小,于是可以确定原排列。只用研究\(v\),不用......
  • 使用Cpolar内网穿透与Lightpicture组合将个人电脑改造成能随时上传、下载或访问,并能生
    1.前言现在的手机越来越先进,功能也越来越多,而手机的摄像功能也愈发强大,所拍摄的照片越来越清晰,但也让数码照片的体积暴涨。对于像笔者这样经常拍照的人来说,手机容量经常告警,因此笔者将家里的电脑改造成能随时上传下载和访问的图片服务器。今天,笔者就为大家展示,如何使用Cpolar内网......