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

题解:CF1398D Colored Rectangles

前言

看串行了……看成 R , G , B ≤ 2000 R,G,B\le 2000 R,G,B2000 了没往三维 DP 想……

赛后看了正解,回忆起了熟悉的棍子。

题目大意

R R R 对红色的棍子,第 i i i 对长度为 r i r_i ri

G G G 对绿色的棍子,第 i i i 对长度为 g i g_i gi

B B B 对蓝色的棍子,第 i i i 对长度为 b i b_i bi

现在用两种不同颜色的棍子组成长方形,问面积之和的最大值是多少。

思路

实际上的数据范围: R , G , B ≤ 200 R,G,B\le200 R,G,B200,所以时间复杂度和空间复杂度均可以为 O ( R G B ) O(RGB) O(RGB),考虑三维 DP。

f i , j , k f_{i,j,k} fi,j,k 表示前 i i i 个红色棍子、前 j j j 个绿色棍子、前 k k k 个蓝色棍子的最大总面积。

我们考虑一下每一次都有哪些转移的可能性:

  • 红 + 绿:此时答案为 f i − 1 , j − 1 , k + r i ⋅ g j f_{i-1,j-1,k}+r_i\cdot g_j fi1,j1,k+rigj
  • 绿 + 蓝:此时答案为 f i − , j − 1 , k 1 + g j ⋅ b k f_{i-,j-1,k1}+g_j\cdot b_k fi,j1,k1+gjbk
  • 蓝 + 红:此时答案为 f i − 1 , j , k − 1 + b k ⋅ r i f_{i-1,j,k-1}+b_k\cdot r_i fi1,j,k1+bkri

所以 f i , j , k f_{i,j,k} fi,j,k 就是上述值的最大值。

我们在具体实现的时候要对三个数组进行排序,从小到大或者从大到小都可以。

代码

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;int R, r[210];
int G, g[210];
int B, b[210];
int f[210][210][210];int main()
{cin >> R >> G >> B;for (int i = 1; i <= R; i++)cin >> r[i];sort(r + 1, r + R + 1);reverse(r + 1, r + R + 1);for (int i = 1; i <= G; i++)cin >> g[i];sort(g + 1, g + G + 1);reverse(g + 1, g + G + 1);for (int i = 1; i <= B; i++)cin >> b[i];sort(b + 1, b + B + 1);reverse(b + 1, b + B + 1);int ans = 0;for (int i = 0; i <= R; i++)for (int j = 0; j <= G; j++)for (int k = 0; k <= B; k++){if (i && j) f[i][j][k] = max(f[i][j][k], f[i - 1][j - 1][k] + r[i] * g[j]);if (j && k) f[i][j][k] = max(f[i][j][k], f[i][j - 1][k - 1] + g[j] * b[k]);if (k && i) f[i][j][k] = max(f[i][j][k], f[i - 1][j][k - 1] + b[k] * r[i]);ans = max(ans, f[i][j][k]);}cout << ans << endl;return 0;
} 

相关文章:

  • 华为eNSP:多区域集成IS-IS
  • Python基本语法(控制语句)
  • Java中修饰类的关键字
  • windows中Python的pip工具换源的方法及其原理
  • RISC-V AIA SPEC学习(四)
  • 位运算切换大小写
  • C 语言 第五章 指针(5)
  • MATLAB 中zerophase函数——零相位响应
  • (B题|矿山数据处理问题)2025年第二十二届五一数学建模竞赛(五一杯/五一赛)解题思路|完整代码论文集合
  • 「面白い」日本 课文详解
  • 2025东三省C题深圳杯C题数学建模挑战赛数模思路代码文章教学: 分布式能源接入配电网的风险分析
  • FreeSWITCH 发送 sip message 的 lua 程序
  • 【C语言常用字符串解析】
  • 解锁 C++26 的未来:从语言标准演进到实战突破
  • 负载均衡深度实践:基于Nginx+Keepalived的高可用方案与Zabbix监控设计
  • archlinux wine 运行windows程序
  • Python学习笔记(第三部分)
  • 人工智能对未来工作的影响
  • 三生原理的离散生成逻辑如何与复分析结合?
  • Python字典(dict)详解:从创建到操作全掌握
  • 当农民跨进流动的世界|劳动者的书信①
  • 关于新冠疫情防控与病毒溯源的中方行动和立场
  • “女乘客遭顺风车深夜丢高速服务区”续:滴滴永久封禁两名涉事司机账号
  • 解放日报:中国大模型企业的发展机遇已经到来
  • 国有六大行一季度合计净赚超3444亿,不良贷款余额均上升
  • 这就是上海!