D. Colored Rectangles
传送门
分析
个人感觉这道题比C简单(一个DP选手最后的尊严)
题目大意是说有三种不同的木棒,第一种木棒有a对,第二种b对,第三种c对,每次取两对不同的木棒组成一个矩形,问最后组成的若干个矩形的面积之和最大是多少
首先我们假设已经选了i个第一种,j个第二种,k个第三种,那么我们可以列成三个状态转移方程
//取第一个和第三个
dp[i + 1][j][k + 1] = max(dp[i + 1][j][k + 1],dp[i][j][k] + 1ll * x[i + 1] * z[k + 1]);
//取第二个和第三个
dp[i][j + 1][k + 1] = max(dp[i][j + 1][k + 1],dp[i][j][k] + 1ll * y[j + 1] * z[k + 1]);
//取第一个和第二个
dp[i + 1][j + 1][k] = max(dp[i + 1][j + 1][k],dp[i][j][k] + 1ll * x[i + 1] * y[j + 1]);
最后需要注意一下要让最大的数字相互组合,所以一开始的时候需要将数组sort一下
代码
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cstring>
#define debug(x) cout<<#x<<":"<<x<<endl;
#define _CRT_SECURE_NO_WARNINGS
#pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline")
// #pragma GCC option("arch=native","tune=native","no-zero-upper")
#pragma GCC target("avx2")
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int T;
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int N = 210;
int a[N];
int r,g,b;
int x[N],y[N],z[N];
ll dp[N][N][N];bool cmp(int x,int y){return x > y;
}int main(){scanf("%d%d%d",&r,&g,&b);for(int i = 1;i <= r;i++) scanf("%d",&x[i]);for(int i = 1;i <= g;i++) scanf("%d",&y[i]);for(int i = 1;i <= b;i++) scanf("%d",&z[i]);sort(x + 1,x + 1 + r,cmp);sort(y + 1,y + 1 + g,cmp);sort(z + 1,z + 1 + b,cmp);ll ans = 0;for(int i = 0;i <= r;i++)for(int j = 0;j <= g;j++){// dp[i + 1][j + 1][0] = max(dp[i + 1][j + 1][0],dp[i][j][k] + 1ll * x[i + 1] * y[k + 1]);for(int k = 0;k <= b;k++){dp[i + 1][j][k + 1] = max(dp[i + 1][j][k + 1],dp[i][j][k] + 1ll * x[i + 1] * z[k + 1]);dp[i][j + 1][k + 1] = max(dp[i][j + 1][k + 1],dp[i][j][k] + 1ll * y[j + 1] * z[k + 1]);dp[i + 1][j + 1][k] = max(dp[i + 1][j + 1][k],dp[i][j][k] + 1ll * x[i + 1] * y[j + 1]);ans = max(dp[i + 1][j][k + 1],ans);ans = max(dp[i][j + 1][k + 1],ans);ans = max(dp[i + 1][j + 1][k],ans);}}printf("%lld",ans);
}
D. Colored Rectangles相关推荐
- Colored Rectangles【简单DP】
题目描述:原题链接 You are given three multisets of pairs of colored sticks: R pairs of red sticks, the first ...
- D. Colored Rectangles[思维dp]
题意: 3种颜色木棍,每次从两种颜色木棍各选一对组成矩形.求最后所有矩形面积和最大值. #include <cstdio> #include <cstring> #includ ...
- CF1398D Colored Rectangles (记忆化搜索DP)
数据范围只有200,所以我们可以用O(n3)O(n^3)O(n3)的暴力DP 闫氏DP分析法用着是真的爽 #include<cstdio> #include<algorithm> ...
- Educational Codeforces Round 93 (Rated for Div. 2) 题解
目录 A.CF1398A Bad Triangle(模拟) B.CF1398B Substring Removal Game(贪心) C.CF1398C Good Subarrays(映射) D.CF ...
- Educational Codeforces Round 93 (Rated for Div. 2)
A - Bad Triangle 选出三个序列使之不能组成三角形.先把差距最大的选了,枚举中间值.两边之和不大于第三边. #define IO ios::sync_with_stdio(false); ...
- react发送和接收请求_React行为编程简介:请求,等待和阻止
react发送和接收请求 by Luca Matteis 卢卡·马蒂斯(Luca Matteis) React行为编程简介:请求,等待和阻止 (An intro to Behavioral Progr ...
- adobe captivate 5.5 中文教程
adobe captivate 5.5 中文教程 目 录 adobe captivate 5.5 中文教程... 1 目 录... 1 第1节 Adobe Captivate 5.5更新的内容... ...
- LVGL之学习篇(一)
LVGL之学习篇(一) 学习目的 LVGL简介 LVGL本身是一个图形库,前身是litterVGL.其作者是来自匈牙利的Gabor Kiss-Vamosikisvegabor,LVGL用C语言编写,以 ...
- 二八定律,它是无标度的_第七定律,如果一个接口不能做到,它将模拟它
二八定律,它是无标度的 If interfaces do form part of an ecosystem and 'think each other' (Third Law), they also ...
最新文章
- 深入理解Java的接口和抽象类
- NameError: name ‘sess‘ is not defined
- 【团队管理】改造团队成员?
- 微信小程序自定义组件 插槽
- Bootstrap创建拼接式按钮下拉菜单
- 安卓自定义view全解:初始化,onDraw函数,onMeasure函数,用户手势事件
- WPF特效-实现3D足球效果
- mysql的驱动jar包下载
- emoji粉色爱心符号_新的emoji又来袭!你们知道这些表情符号的真正含义吗?
- 高等数学-不定积分基本公式
- pdf复制json不全的问题
- Windows事件ID大全
- Python,OpenCV制作全透明图,简单的图片
- Java 编程要点之并发(Concurrency)详解
- Web前端基础体验学习过程1 HTML篇
- html3d粒子球,Canvas粒子系统:3D球体
- 虚拟机安装MacOS
- MATLAB矩阵变换
- dns被劫持怎么办,一文说清dns劫持与防御
- linux修改英文设置密码,linux 如何修改passwd的密码 设置密码
热门文章
- 金数据预约登记工具 引入医院信息管理部门
- 福建专科计算机学校排名2015,2015福建专科学校排名及排行榜
- 计算机文秘所学的专业知识,18文秘02李荧 随着现代科学技术的发展,计算机已经...
- 金山快盘 linux,WPS移动版5.5发布 支持金山快盘双向读写
- Pupil dynamics for iris liveness detection 瞳孔活体检测论文翻译
- TK1上如何安装teamviewer,完结
- 总是腰疼背痛 竟是“穿错鞋”惹的祸
- 2021.6~2022.6实习、秋招总结
- uip协议,主动发送功能
- 最受程序员欢迎的20本书