poj 2279 dp做法

【算法竞赛进阶指南】POJ 2279 - 杨老师的照相排列 - 线性dp计算方案数 题目描述 传送门:Acwing / POJ (注意在poj提交时换掉代码中的万能头) 有N个学生合影,站成左端对齐的k排,每排分别有N1,N2,…,Nk 个人。 (N1≥N2≥…≥Nk) 第1排站在最后边,第k排站在最前边。 学生的身高互不相同,把他们从高到底依次标记为1,2,…,N。 在合影时要求每一排从左到右身高递减,每一列从后到前身高也递减。 问一共有多少种安排... 阅读详情

这题用dp貌似会爆内存吧…数组有点大,反正dp做法只是参考
对于题目,我们将学生按高度从高到矮安排,那么这样的话其实在每一行的层面肯定是可以保证左边比右边高的,因为前面安排的都是更高的学生。
安排新的学生时,对于每一行有如下考虑:
1.该行未满
2.行号为1,或者该行的学生数比上一行少(这样的话,就能保证如果新插入学生,那么这个学生的高度也比上一行同一位置的学生高度低)

f[a1][a2][a3][a4][a5]表示每一行学生数
边界条件:f[0][0][0][0][0]=1;

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    long long f[31][31][31][31][31];
    int n, i, j, k;
    int lim[6];
    while (cin >> n && n) {
        memset(f, 0, sizeof(f)); memset(lim, 0, sizeof(lim));
        for (i = 1; i <= n; i++)
            cin >> lim[i];
        f[0][0][0][0][0] = 1;
        for (i = 0; i <= lim[1]; i++)
            for (j = 0; j <= lim[2]; j++) {
                //if (i <= j)continue;
                for (k = 0; k <= lim[3]; k++) {
                    //if (j <= k)continue;
                    for (int a = 0; a <= lim[4]; a++) {
                        //if (k <= a)continue;
                        for (int b = 0; b <= lim[5]; b++) {
                            //if (a <= b)continue;
                            if (i + 1 <= lim[1])f[i + 1][j][k][a][b] += f[i][j][k][a][b];
                            if (j + 1 <= lim[2] && j < i)f[i][j + 1][k][a][b] += f[i][j][k][a][b];
                            if (k + 1 <= lim[3] && k < j&&k < i)f[i][j][k + 1][a][b] += f[i][j][k][a][b];
                            if (a + 1 <= lim[4] && a < i&&a < j&&a < k)f[i][j][k][a + 1][b] += f[i][j][k][a][b];
                            if (b + 1 <= lim[5] && b < i&&b < j&&b < k&&b < a)f[i][j][k][a][b + 1] += f[i][j][k][a][b];
                        }
                    }
                }
            }
        cout << f[lim[1]][lim[2]][lim[3]][lim[4]][lim[5]] << endl;
    }

    return 0;
}

一定不能像注释里那样加判断条件,因为后面的行是可以跟上一行一样多人的,只要后面的行不加人的话.

利用kettle进行数据库数据比对 Kettle是一款国外开源的ETL工具,纯java编写,可以在Windows、Linux、Unix上运行,数据抽取高效稳定。本人用的版本是6.1。 之前用kettle这个开源的ETL工具是用来做数据抽取的,这次测试有个需求,是做数据库数据的比对。验证源表到目标表的逻辑正确,从而利用源表自己写SQL逻辑,生成的结果和目标表去比对。这次想到了利用kettle的数据比较功能,来做这些数据校验。 ... 阅读详情

相关推荐

保姆级教程:用GATK4分析重测序数据,从fq.gz到vcf文件一步不落

本文提供了一份详细的GATK4重测序数据分析教程,涵盖从原始fq.gz文件到最终vcf文件的完整上游分析流程。通过Miniconda环境配置、数据质控、序列比对、变异检测等步骤的逐步指导,帮助生物信息学研究人员掌握标准流程,特别适合Linux命令行基础薄弱的研究者学习实践。

weixin_28366053的博客 473

POJ 2279【杨氏矩阵+钩长公式】

题目链接:http://poj.org/problem?id=22793 题意:给出n行,每行有人数限制a[i],并且a[i]&gt;=a[i+1],总人数暂且称为tot=∑a[i],把 1~tot 这些数字填入矩阵,使得矩阵满足每行单调递增,每列单调递增,求满足要求的矩阵数目。 杨氏矩阵又叫杨氏图表,它是这样一个矩阵,满足条件: (1)如果格子(i,j)没有元素,则它右边和上边的相邻格子也...

小康的博客 971

Android无线调试:adb tcpip连接实战指南

本文详细介绍了Android无线调试的完整流程,重点讲解如何使用adb tcpip命令通过Wi-Fi连接设备,摆脱数据线束缚。涵盖环境配置、连接实战、稳定性优化及常见问题排查,帮助开发者高效实现无线adb调试,提升工作效率。

pink的博客 721

POJ2279 五维线性dp

POJ2279 五维线性dp(动态规划入门) 题面 POJ2279题面 思路 从头开始系统的学dp,做题目一定要理清dp的五大因素 状态表示 用dp[a1,a2,a3,a4,a5a_1,a_2,a_3,a_4,a_5a1​,a2​,a3​,a4​,a5​]表示第i行上已经插入了aia_iai​个人的排队方法数 阶段划分 已经在各排分配了制定人数的方法数(对应一个五元组) 转移方...

Time Limit Exceeded on test 99 555

详解Numpy中的transpose方法

最近在学Numpy碰到了关于数组转置和换轴的概念,尤其是对tanspose方法有些疑惑,尤其是多维,查了不少资料,终于搞懂了。 Numpy数组的轴(axis) 所谓的**轴(axis)**可以理解为数组的维度。 具体而言,二维数组就是有两个维度,如果从空间上看,它就是一个平面,由x轴和y轴构成,而与此相对应的,该二维数组就有两个轴,x轴对应0轴,y轴对应1轴。 同理,三维数组有三个维度,空间上...

BlankGrid的博客 936

【win11 cuda12.0安装tensorflow-gpu】

win11 cuda 12.0 安装 tensorflow-gpu

weixin_36299320的博客 3009

poj 2279 dp(防MLE) 或 数论(杨氏矩阵+勾长公式)

题目链接:poj 2279 这个题目 有两种做法 dp 或者是 杨氏矩阵+勾长公式 首先是dp做法(参考lyd的书) 这有个小技巧 就是 31的5次方会爆内存 所以我们得开个可变的数组 就是 先把那5维的大小输入 在创建数组 这样可以节省很多空间 另外像这种可变数组是不能全局声明的 #include<cstdio> #include<cstring> ...

weixin_43824564的博客 412

TI 实时操作系统SYS/BIOS使用总结

1:概述: SYS/BIOS 是一个可扩展的实时的操作系统。具有非常快速的响应时间(在中断和任务切换时达到较短的延迟),响应时间的确定性,强壮的抢占系统,优化的内存分配和堆栈管理(尽量少的消耗和碎片)。能够实现系统的模块化并可裁剪。 最大的特点就是:实时。 2:XDCtools: XDCtools 是SYS/BIOS引用的一种实时的软件组件技术(RTSC),它包括一些有用的工具,标准的AP

带头奋青的博客 5万+

poj 2279(线性 dp)

内存爆了 将所有新生从高到底排序, 在第i行插入新生时: 人数<=该行人数 如果在第一行就直接插,不在则 需要满足 ** 该行人数 <= 上一行人数** f[0][0][0][0][0] = 1 应该为0,为了不写+1则初始化为1; #include <iostream> #include <string.h> using namespace st...

_llc的博客 382

海康威视Web3.0插件实战:快速部署摄像头实时预览方案

本文详细介绍了海康威视Web3.0插件的实战应用,包括快速部署摄像头实时预览方案的完整流程。从插件下载安装到摄像头连接配置,再到浏览器兼容性解决方案,帮助开发者和IT人员高效实现网页端监控功能。特别针对预览功能调优和多摄像头管理等高级应用提供了实用技巧。

weixin_29266679的博客 346

STM32串口控制LED灯的亮灭

STM32中的串口控制LED灯的亮灭,分为两种方式,一种是直接发送数字0和1来控制灯的亮灭,另一种是通过发送字符串来控制。 我所使用的开发板主控芯片是STM32F401RET6,主频84MHz, 首先要进行串口的初始化: /* 函数功能:串口的初始化 函数名:Usart_Init 返回值:无 参数:u32 brr 备注: USART1_TXD->PA9 USART1_RXD->PA10 */ void Usart_Init(u32 brr) { float div; u16 div

博客 2万+

POJ - 2279 Mr.Young's Picture Permutations(dp做法)

题目来源:http://poj.org/problem?id=2279 由于总排数不超过5,且每一排的人数最多为30,可以考虑令f[a1][a2][a3][a4][a5]表示第i排站ai个人的方案数。 边界条件是f[0][0][0][0][0] = 1。 分别考虑依照身高从大到小的顺序向每一排安放,这样每次只能安放在某一排的最后一个位置,而且这一排的人数要少于之前一排的人数。 因此,对于状...

No cost too great! 306

华为OD面试手撕真题目录

2026最新华为OD面试手撕真题 , 提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解.

qq_45776114的博客 1万+

POJ2279 Mr. Young's Picture Permutations

POJ2279 Mr. Young’s Picture Permutations 题解 题目请戳这里: Mr. Young’s Picture Permutations 这道题有两种解法。 解法1:动态规划 这道题即满足最优子结构,又满足无后效性,显然可以用动态规划求解。 我们可以考虑,因为这里的矩阵最多只有五行,我们可以用 N1⋯N5N_1 \cdots N_5N1​⋯N5​ 来表示每行的人数,...

Believe_R_的博客 376

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

POJ2279 线性dp

http://poj.org/problem?id=2279 学习思路,直接开空间会爆内存,开个动态的可还行。可是怎么开动态多维数组需要学习 #include<cstdio> #include<iostream> #include<cstring> using namespace std; long long f[31][31][31][31][31]; in...

Vicente的博客 256

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【题解】POJ2279 Mr.Young′s Picture Permutations dp

【题解】POJ2279 Mr.Young′s Picture Permutations dp 钦定从小往大放,然后直接dp。 \(dp(t1,t2,t3,t4,t5)\)代表每一行多少人,判断边界就能dp。 然后你发现\(30^5\)开不下,但是你仔细观察由于它保证\(\sum < 30\)所以你只用开\(30^5 \div 5!\)就好了。 具体为什么我相信你会 //@winlere #i...

weixin_30265171的博客 198

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

POJ2279 Mr. Young's Picture Permutations 线性DP

题目链接 http://poj.org/problem?id=2279 分析 kkk 的范围很小,设状态为 f[a][b][c][d][e]f[a][b][c][d][e]f[a][b][c][d][e],考虑可以从哪些状态转移得来; 显然是那些合法的,且人数比该状态恰好少 111 的; 我们假定从 111 到 nnn 依次安排,则合法状态要求 a≥b≥c≥d≥ea \geq b \geq c \...

Kevin的博客 349

轮廓线DP:poj 2279 Mr. Young's Picture Permutations

poj 2279 Mr. Young's Picture Permutations \(solution:\) 首先摘取一些关键词:(每行不超过它后面的行)(每排学生安排高度从左到右减少)(学生的高度应该从后面到前面减少)。这个已经很提示我们轮廓线DP了。而且这一题的数据范围也十分的小:行数不超过五行,人数不多于三十人。这么小的数据范围基本上可以断定是DP了。 然后这种带限制条件的我们可...

weixin_30474613的博客 102

POJ2279 Mr Young's Picture Permutations

POJ2279 Mr Young's Picture Permutations 描述: 有N个学生合影,站成左对齐的k排,每行分别有N1,N2…NK个人,第一排站最后,第k排站之前。学生身高依次是1…N。在合影时候要求每一排从左到右递减,每一列从后面到前也递减,一共有多少总方案输入每组测试数据包含两行。第一行给出行数k。 第二行包含从后到前(n1,n2,…,nk)的行的长度,作为由单...

weixin_33958366的博客 137

POJ 2279 动态规划,进阶指南

算法竞赛进阶指南, 265 页 题目意思: 杨先生要给他的学生们拍照片。首先,站队状况是确定的,若第i行站了r[i]个人,则有r[1] ≥ r[2] ≥ … ≥ r[n], 所有的行都是靠左对齐的。并且,在同一行和同一列里面,从左到右或者从上到下身高都是递减的。 现在所有学生的身高都不相同,学生数不超过30个,行数不超过5。你需要求出所有可能的排队方法的总数。 本题要点: 1、 最多只有5 排,不够 5排凑够5排。 r[i] 表示第i排最多站几人 2、 dp[i1][i2][i3][i4][i5] 表示 第

qq_38232157的博客 256

POJ 2279

线性DP 本题的正解是杨氏矩阵与钩子定理 但是这道题用DP的思想非常好 但是这样会MLE... #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; ...

430

算法竞赛进阶指南 线性dp

1.poj2279 思路:线性dp,但过不了poj上的样例,会爆内存,,实验只能去Acwing上实验。最后一个last元素可以尝试每一排,但是有个界限状态的要点我觉得应该把初始状态设为dp[1][0][0][0][0]=1应该比dp00000更好理解个人认为。。要开Long Long #include<bits/stdc++.h> using namespace std; type...

weixin_43818893的博客 382

POJ2279杨氏矩阵+钩子定理

题目:http://poj.org/problem?id=2279 有dp做法,但会MLE。   dp的思想很好,是通过 “按身高由小到大往进放” 把 “身高小于” 的条件转化成 “放进去的先后” ,于是又变成 “当前位置的上边和左边是否已放” 。   “左边” 通过对每一行长度的记录;“上边” 通过与上一行长度的比较,就可以状态转移了。 正解是用公式。杨氏矩阵(虽然没用上)+钩子公式。 ...

weixin_30586257的博客 78

POJ2279-Mr. Young's Picture Permutations【线性dp】

正题 题目链接:http://poj.org/problem?id=2279 题目大意 有k列,每列人数不同,要求从左到右和从前到后身高都单调递减,学生高度是1∼N1∼N1\sim N(人数总和) 解题思路 我们开一个五维数组,然后每次在人少那列填充,按照这总方法,我们进行dp(公式较长,暂不解释)。 code #include&lt;cstdio&gt; #incl...

QuantAsk 910

POJ 2279 dp

Mr. Young's Picture Permutations Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1826   Accepted: 773 Description Mr. Young wishes to take a picture of his class. The st...

我是谁 --- 卡比兽 350

POJ - 2279 Mr. Young‘s Picture Permutations(线性DP)

POJ - 2279 Mr. Young’s Picture Permutations #include<iostream> #include<cstring> using namespace std; typedef long long LL; int s[6]; int n; int main() { while(cin>>n&&n) { memset(s,0,sizeof s); for(int i=0;i<n;i++) c

00后的博客 270
上一篇: 归并排序模板
下一篇: 并查集模板
HumveeA6
博客等级 码龄17年 12粉丝 175原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值