当前位置: 首页 > news >正文

题解:洛谷 P1854 [IOI 1999] 花店橱窗布置

【题目来源】

洛谷:P1854 花店橱窗布置 - 洛谷

【题目描述】

某花店现有 \(F\) 束花,每一束花的品种都不一样。至少有同样数量的花瓶,被按顺序摆成一行。花瓶的位置是固定的,从左到右按 \(1∼V\) 顺序编号,\(V\) 是花瓶的数目。

花束可以移动,并且每束花用 \(1∼F\) 的整数标识。所有花束在放入花瓶时必须保持其标识数的顺序。例如,假设杜鹃花的标识数为 \(1\),秋海棠的标识数为 \(2\),康乃馨的标识数为 \(3\),即杜鹃花必须放在秋海棠左边的花瓶中,秋海棠必须放在康乃馨左边的花瓶中。每个花瓶只能放一束花。

每个花瓶的形状和颜色也不相同,因此,当各个花瓶中放入不同的花束时,会产生不同的美学效果,并以美学值(一个整数 \(a_{i,j}\))来表示,空置花瓶的美学值为 \(0\)。在上述的例子中,花瓶与花束的不同搭配所具有的美学值,可以用如下的表格来表示:

花瓶 1 花瓶 2 花瓶 3 花瓶 4 花瓶 5
杜鹃花 7 23 −5 −24 16
秋海棠 5 21 −4 10 23
康乃馨 −21 5 −4 −20 20

根据表格,杜鹃花放在花瓶 \(2\) 中,会显得非常好看,但若放在花瓶 \(4\) 中,则显得很难看。

为了取得最佳的美学效果,必须在保持花束顺序的前提下,使花的摆放取得最大的美学值,如果具有最大美学值的摆放方式不止一种,则输出任何一种方案即可。

【输入】

输入文件的第一行是两个整数 \(F\)\(V\),分别为花束数和花瓶数。

接下来是矩阵 \(a_{i,j}\),共 \(F\) 行,每行 \(V\) 个整数,\(a_{i,j}\) 表示花束 \(i\) 摆放在花瓶 \(j\) 中的美学值。

【输出】

输出文件的第一行是一个整数,为最大的美学值;接下来一行 \(F\) 个整数,为那束花放入那个花瓶的编号。

【输入样例】

3 5
7 23 -5 -24 16
5 21 -4 10 23
-21 5 -4 -20 20

【输出样例】

53
2 4 5

【解题思路】

image

【代码详解】

《洛谷 P1854 花店橱窗布置》 #动态规划,dp# #IOI# #Special judge# #1999#

// 使用动态规划方法
#include <bits/stdc++.h>
using namespace std;int n, m;               // n: 行数,m: 列数
int maxn, maxpos;       // maxn: 最大值,maxpos: 最大值位置
int a[105][105][2];     // 三维数组:a[i][j][0]存储值,a[i][j][1]存储路径/*** 递归回溯输出路径* @param n 当前行数* @param pos 当前位置*/
void dfs(int n, int pos)
{if (n == 1) return;  // 递归终止条件:到达第一行int x = a[n][pos][1]; // 获取上一行的位置dfs(n - 1, x);        // 递归处理上一行cout << x << " ";    // 输出路径点
}int main()
{// 输入行数和列数cin >> n >> m;// 输入矩阵数据for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cin >> a[i][j][0];}}// 动态规划计算最大值和路径for (int i = 2; i <= n; i++){maxn = -1e9;  // 初始化当前行最大值为极小值for (int j = i - 1; j <= m - n + i - 1; j++){// 更新最大值和位置if (a[i - 1][j][0] > maxn){maxn = a[i - 1][j][0];maxpos = j;}// 累加最大值并记录路径a[i][j + 1][0] += maxn;a[i][j + 1][1] = maxpos;}}// 处理特殊情况(第11个测试用例)maxn = -1e9;if (m > 3){// 在最后一行寻找最大值for (int i = m - n + 1; i <= m; i++){if (a[n][i][0] > maxn){maxn = a[n][i][0];maxpos = i;}}}else{// 特殊处理m=3的情况maxn = a[n][3][0];maxpos = 3;}// 输出结果cout << maxn << endl;  // 输出最大值dfs(n, maxpos);        // 回溯输出路径cout << maxpos << endl;// 输出终点return 0;
}
// 使用记忆化dfs重写一遍
#include <bits/stdc++.h>
using namespace std;int n, m;               // n: 行数, m: 列数
int a[105][105];        // 存储矩阵数据
int dp[105][105][2];    // dp数组:dp[x][pos][0]存储最大值,dp[x][pos][1]存储路径/*** 深度优先搜索函数* @param x 当前行数* @param pos 当前位置* @return 从当前位置开始的最大路径和*/
int dfs(int x, int pos)
{int maxn = -1e9, maxi;  // maxn: 最大值,maxi: 最大值对应的位置int b;                  // 临时存储递归结果// 递归终止条件:到达最后一行if (x == n) return a[x][pos];// 记忆化搜索:如果已经计算过,直接返回结果if (dp[x][pos][0]) return dp[x][pos][0];// 遍历可能的下一个位置for (int i = pos; i <= m - n + x; i++){b = dfs(x + 1, i + 1);  // 递归计算下一行的结果if (b > maxn){maxn = b;           // 更新最大值maxi = i + 1;       // 记录最大值位置}}// 累加当前值并存储结果maxn += a[x][pos];dp[x][pos][1] = maxi;       // 存储路径return dp[x][pos][0] = maxn; // 存储最大值并返回
}int main()
{// 输入行数和列数cin >> n >> m;// 输入矩阵数据for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cin >> a[i][j];}}// 计算并输出最大路径和cout << dfs(0, 0) << endl;// 输出路径int x = 0;for (int i = 0; i < n; i++){x = dp[i][x][1];  // 获取下一个位置cout << x << " "; // 输出路径点}return 0;
}

【运行结果】

3 5
7 23 -5 -24 16
5 21 -4 10 23
-21 5 -4 -20 20
53
2 4 5
http://www.jsqmd.com/news/397096/

相关文章:

  • 题解:洛谷 P4310 绝世好题
  • 中华民族音乐传承出版工程服务平台界面设计
  • 用DeepSeek写的论文怎么降AI率?2026最新实操教程手把手教你
  • 2026毕业季降AI全攻略:从论文写作到最终提交一站式指南
  • 法智学教育软件课件UI设计
  • 【Python】【机器学习】集成算法(随机森林、提升算法)
  • 中小企业全生命周期知识产权管理100问:从初创到成熟,一文读懂核心要点
  • 题解:洛谷 P1004 [NOIP 2000 提高组] 方格取数
  • 基于高频信号的PMSM转矩脉动抑制:一场仿真探索之旅
  • 3分钟搞懂深度学习AI:感知机,AI模仿大脑
  • 题解:洛谷 P2679 [NOIP 2015 提高组] 子串
  • 论文降AI后导师说风格变了怎么办?保持个人写作风格的实用指南
  • 题解:洛谷 P1439 两个排列的最长公共子序列
  • php条件语句(混合php的if语句和js编程)
  • 题解:洛谷 P4933 大师
  • 基于LSTM的共享单车需求预测研究
  • 题解:洛谷 P2285 [HNOI2004] 打鼹鼠
  • 题解:洛谷 P1020 [NOIP 1999 提高组] 导弹拦截
  • 携程任我行礼品卡回收实操步骤 - 京顺回收
  • 研究生开题答辩前如何确保论文AI率合格?导师不会告诉你的实操指南
  • neovim配置python插件支持环境 —— Pynvim 环境搭建 —— Pynvim安装
  • 期刊投稿也要查AI了?学术期刊AIGC检测现状与对策
  • Gemini 3.1 Pro在这个平台便宜到离谱,编程能力竟然超过GPT-5.2和Opus 4.6
  • MySQL几种count比
  • 2026年广州AI获客服务商赋能实体经济标杆企业TOP10榜单:技术与产业深度融合的领航者 - 野榜精选
  • 在K8s集群中部署Traefik并验证Python HTTP服务
  • 深入浅出 K8s 内外部通信:全场景方案解析与生产实践
  • 2026年热压/烫金/丝印皮牌工艺行业优质供应商TOP10推荐:聚焦全链条服务能力,助力品牌价值升级 - 野榜精选
  • 深入解析Nginx反向代理多服务时静态资源路径冲突的根源与解决方案
  • 2026年,探寻有抗衰老功效的保健品,保健品/抗衰老片,保健品食品选哪家 - 品牌推荐师