Mr. Young‘s Picture Permutations

news2024/11/18 10:42:23

Mr. Young’s Picture Permutations

看了李煜东老师的答案。
对dp的转移有了一点别的理解。
之前都是按y总那样考虑当前状态是由那些状态转移过来的。
这道题目看算阶上的思考方式,考虑的是当前状态能够转移到那些状态。
更具体点就是说,考虑 f [ i ] [ j ] [ k ] [ l ] [ r ] f[i][j][k][l][r] f[i][j][k][l][r]我可以把这一个人放在哪一行。
f [ i + 1 ] [ j ] [ k ] [ l ] [ r ] f[i+1][j][k][l][r] f[i+1][j][k][l][r]就是把这个人放在第一行。
也就是 f [ i ] [ j ] [ k ] [ l ] [ r ] f[i][j][k][l][r] f[i][j][k][l][r]可能能转移到 f [ i + 1 ] [ j ] [ k ] [ l ] [ r ] f[i+1][j][k][l][r] f[i+1][j][k][l][r]
但是转移是需要满足条件的
也就是满足按行递增、按列递增
考虑从1~n去放,第一行一定能放这是没有问题的。
也就是第一行只需要满足 i < a [ 1 ] i<a[1] i<a[1]就可以放
其他的行需要额外满足按列递增也就是要放的这一行的这一列它的上一行之前一定已经放过数了。也就是如下图,只有前面放过数了才能保证按列是递增的,行就没有这个问题,因为行本身就能保证这个性质。
总结:真的是很不错的dp题目,第一道就给了我一个下马威。

  1. dp题要算一下空间可能会爆空间。
  2. 多测,清数组要清干净。不然wa到自闭。
    036d6396fade1fdae1e13d70953c0a4.jpg
#include <bits/stdc++.h>

#define int long long
#define rep(i, a, b) for(int i = (a); i <= (b); ++i)
#define fep(i, a, b) for(int i = (a); i >= (b); --i)
#define _for(i, a, b) for(int i=(a); i<(b); ++i)
#define pii pair<int, int>
#define pdd pair<double,double>
#define ll long long
#define db double
#define endl '\n'
#define fs first
#define sc second
#define pb push_back
#define vi vector<int>

using namespace std;
const int maxn = 2e5 + 10;
int n;
int a[10];

void solve()
{

    while (cin >> n && n)
    {
        memset(a,0,sizeof(a));
        rep(i, 1, n)
        {
            cin >> a[i];
        }

        int f[a[1]+3][a[2]+3][a[3]+3][a[4]+3][a[5]+3];
        memset(f,0,sizeof(f));
        f[0][0][0][0][0] = 1;
        rep(i, 0, a[1])
        {
            rep(j, 0, a[2])
            {
                rep(k, 0, a[3])
                {
                    rep(l, 0, a[4])
                    {
                        rep(r, 0, a[5])
                        {
                            if (i < a[1])
                            {
                                f[i + 1][j][k][l][r] += f[i][j][k][l][r];
                            }
                            if (i > j)
                            {
                                f[i][j + 1][k][l][r] += f[i][j][k][l][r];
                            }
                            if (j > k)
                            {
                                f[i][j][k + 1][l][r] += f[i][j][k][l][r];
                            }
                            if (k > l)
                            {
                                f[i][j][k][l + 1][r] += f[i][j][k][l][r];
                            }
                            if (l > r)
                            {
                                f[i][j][k][l][r + 1] += f[i][j][k][l][r];
                            }
                        }
                    }
                }
            }
        }
        int ans = f[a[1]][a[2]][a[3]][a[4]][a[5]];
        cout << ans << '\n';
    }

}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
//    freopen("C:\\Users\\24283\\CLionProjects\\untitled2\\1.in", "r", stdin);
    solve();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1498824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

千帆AppBuilder使用指南-组件中心

应用中心 百度智能云千帆AppBuilder&#xff08;以下简称为AppBuilder&#xff09;应用中心&#xff0c;提供了大量可以立即体验的应用示例&#xff0c;开发者可以在这里搜索感兴趣的应用进行使用。 官方应用&#xff1a;AppBuilder官方提供的应用&#xff0c;可以立即体验应用…

input输入框的23中类型

HTML 的 <input> 元素支持多种类型&#xff0c;这些类型决定了用户如何与表单控件进行交互。以下是 HTML5 中 <input> 元素的 23 种类型&#xff0c;以及每种类型的代码示例和效果图的描述&#xff08;请注意&#xff0c;由于文本的限制&#xff0c;我无法直接在这…

利用OpenCV 抽取视频的图片,并制作目标检测数据集

1、前言 目标检测中&#xff0c;图片的数据可以从视频中抽取&#xff0c;而OpenCV的VideoCapture可以实现这样的操作 需要的库文件 opencv pip下载&#xff1a; pip install opencv-contrib-python 更换镜像源下载&#xff1a; pip install opencv-contrib-python -i htt…

Python笔记(三)—— Python循环语句

循环普遍存在于日常生活中&#xff0c;同样&#xff0c;在程序中&#xff0c;循环功能也是至关重要的基础功能。 循环在程序中同判断一样&#xff0c;也是广泛存在的&#xff0c;是非常多功能实现的基础&#xff1a; bilibili循环轮播图 循环和判断一样&#xff0c;同样是程序…

算法---双指针练习-1(移动零)

移动零 1. 题目解析2. 讲解算法原理数组划分&#xff0c;数组分块&#xff08;核心思想&#xff09;如何做到 3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 数组划分&#xff0c;数组分块&#xff08;核心思想&#xff09; dest一般初始化为-1&#x…

无限debugger的几种处理方式

不少网站会在代码中加入‘debugger’&#xff0c;使你F12时一直卡在debugger&#xff0c;这种措施会让新手朋友束手无策。 js中创建debugger的方式有很多&#xff0c;基础的形式有&#xff1a; ①直接创建debugger debugger; ②通过eval创建debugger&#xff08;在虚拟机中…

二维码门楼牌管理系统应用场景:智慧城市新动力

文章目录 前言一、政府部门间的信息共享二、合作伙伴的共赢之路三、结语 前言 随着科技的不断发展&#xff0c;二维码门楼牌管理系统正逐渐成为城市管理的新宠。通过这一系统&#xff0c;不仅政府部门可以实现高效的信息共享&#xff0c;合作伙伴和物流行业也能从中受益&#…

Pytorch之神经网络最大池化层

池化层&#xff08;Pooling layer&#xff09;是深度学习神经网络中常用的一种层类型&#xff0c;它的作用是对输入数据进行降采样&#xff08;downsampling&#xff09;操作。池化层通过在输入数据的局部区域上进行聚合操作&#xff0c;将该区域的信息压缩成一个单一的值&…

可视化图表:柱坐标系与对应图表详解

一、柱坐标系及其构成 柱状坐标系是一种常见的可视化图表坐标系&#xff0c;用于显示柱状图&#xff08;也称为条形图&#xff09;的数据。它由两个相互垂直的轴组成&#xff0c;一个是水平轴&#xff08;X轴&#xff09;&#xff0c;另一个是垂直轴&#xff08;Y轴&#xff0…

大型c++项目在linux下如何调试?

大型c项目在linux下如何调试? 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Linux 的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01…

几个市场主流伦敦银交易系统简介

很多人在伦敦银交易中都希望建立一个交易系统&#xff0c;依靠这个系统&#xff0c;我们在市场中能够建立稳定盈利的基础。下面我们就来简单地介绍几个市场主流的伦敦银交易系统。 均线交易系统。这是很多人使用的伦敦银交易系统&#xff0c;一般适用于趋势行情中。均线交易系统…

20240307-2-前端开发校招面试问题整理HTML

前端开发校招面试问题整理【2】——HTML 1、HTML 元素&#xff08;element&#xff09; Q&#xff1a;简单介绍下常用的 HTML 元素&#xff1f; 块状标签&#xff1a;元素独占一行&#xff0c;可指定宽、高。 常用的块状元素有&#xff1a; <div>、<p>、<h1&…

【大模型】Hugging Face下载大模型的相关文件说明

Hugging Face下载大模型文件说明 1.前言 ​ 上图是毛毛张在HuggingFace的官网上的ChatGLM-6B大模型的所有文件,对于初学者来说,对于上面的文件是干什么的很多小伙伴是很迷糊的,根本不知道是干什么的,毛毛张接下来将简单讲述一下上面的每个文件的作用。 2.文件说明 在Hug…

teknoparrot命令行启动游戏

官方github cd 到teknoparrot解压目录 cd /d E:\mn\TeknoParrot2_cp1\GameProfiles启动游戏 TeknoParrotUi.exe --profile游戏配置文件游戏配置文件位置/UserProfiles,如果UserProfiles文件夹里没有那就在/GameProfiles,在配置文件里将游戏路径加入之间,或者打开模拟器设置 …

东南亚媒体发稿案例分析 海外媒体宣传首选CloudNEO

近年来&#xff0c;东南亚地区以其快速发展的经济和多元化的文化成为全球企业竞相进军的热门目的地之一。在这样一个竞争激烈的市场中&#xff0c;有效的媒体宣传成为企业拓展业务、树立品牌形象的重要手段。本文将以东南亚媒体发稿案例为例&#xff0c;分析如何利用CloudNEO提…

HBM研究框架:突破“内存墙”,封装新突破

本文来自“走进芯时代&#xff1a;HBM迭代&#xff0c;3D混合键合成设备材料发力点”。 报告概述 HBM突破“内存墙”,实现高带宽高容量&#xff0c;成为Al芯片最强辅助&#xff0c;我们认为HBM将持续迭代&#xff0c;1/0口数量以及单1/0口速率将逐渐提升&#xff0c;HBM3以及H…

devops-Jenkins【内网环境部署及插件安装】

1、准备工作 外网Linux机器一台&#xff0c;内网Linux机器一台。硬件环境要求&#xff1a;至少1GB的可用内存空间&#xff0c;至少50GB的可用硬盘空间。软件环境需求&#xff1a;需要安装好Java8&#xff0c;Java的运行环境JRE1.8或者Java的开发工具包JDK1.8都可以。 2、外网安…

Linux - 反弹Shell

概念 Shell 估计大家都不陌生&#xff0c;简单来说&#xff0c;就是实现用户命令的接口&#xff0c;通过这个接口我们就能实现对计算机的控制&#xff0c;比如我们常见的 ssh 就是执行的 Shell 命令实现对远程对服务器的控制。 那反弹 Shell &#xff08; Reverse Shell&…

ChatGPT/GPT4科研技术应用与AI绘图(包含Claude3、Gemini、Sora、GPTs中大模型的最新技术)

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

【数据结构】二、线性表:5.静态链表的定义及其基本操作(定义、初始化、插入、查找、删除、遍历、长度、特点)

文章目录 5.静态链表5.1定义5.2初始化5.3插入5.4查找5.5删除5.6遍历5.7长度5.8特点 5.静态链表 静态链表是使用数组来模拟链表结构的一种数据结构&#xff0c;用数组的方式实现的链表。 它与传统链表的区别在于&#xff0c;静态链表使用数组保存节点&#xff0c;每个节点包括…