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

题解: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;
} 
http://www.xdnf.cn/news/3351.html

相关文章:

  • 【一】 基本概念与应用领域【数字图像处理】
  • Python基本语法(控制语句)
  • Spring IoC容器的设计与实现
  • ERP系统(技术面)知识积累
  • Transformer架构的解耦重组现象
  • SpringTas定时任务使用详解
  • GPU虚拟化实现(七)
  • MySQL基础关键_003_DQL(二)
  • 动态规划简单题
  • 【验证技能】验证质量活动及其执行注意事项
  • 权限提升—Linux提权内核溢出漏洞辅助项目
  • 【QNX+Android虚拟化方案】138 - USB 底层传输原理
  • 实验五 完整性
  • 初学者如何学习AI问答应用开发范式
  • PostgreSQL数据类型
  • 使用Python和Pandas实现的Amazon Redshift权限检查与SQL生成用于IT审计
  • 【DeepMLF】具有可学习标记的多模态语言模型,用于情感分析中的深度融合
  • EBO的使用
  • 基于python的人工智能应用简述
  • Spring 提供了多种依赖注入的方式
  • C#泛型集合深度解析(九):掌握System.Collections.Generic的核心精髓
  • 电池预测 | 第27讲 基于CNN卷积神经网络的锂电池剩余寿命预测
  • x86架构详解:定义、应用及特点
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 18)
  • 人工智能对未来工作的影响
  • 治理和管理的区别
  • Linux内核notify通知笔录
  • 软件测评中心如何保障软件质量与性能?评测范围和标准有哪些?
  • Java 多线程进阶:线程安全、synchronized、死锁、wait/notify 全解析(含代码示例)
  • Go 语言中一个功能强大且广泛使用的数据验证库github.com/go-playground/validator/v10