数据范围只有200,所以我们可以用O(n3)O(n^3)O(n3)的暴力DP

闫氏DP分析法用着是真的爽

#include<cstdio>
#include<algorithm>
#include<iostream>using namespace std;const int N = 207;
int f[N][N][N];
int n, m;
int a[N], b[N], c[N];int dfs(int i, int j, int k){if(f[i][j][k])return f[i][j][k];if(i && j)f[i][j][k] = max(f[i][j][k], dfs(i - 1, j - 1, k) + a[i] * b[j]);if(i && k)f[i][j][k] = max(f[i][j][k], dfs(i - 1, j, k - 1) + a[i] * c[k]);if(j && k)f[i][j][k] = max(f[i][j][k], dfs(i, j - 1, k - 1) + b[j] * c[k]);return f[i][j][k];
}int R, G, B;int main(){scanf("%d%d%d", &R, & G, &B);for(int i = 1; i <= R; ++ i)scanf("%d", &a[i]);for(int i = 1; i <= G; ++ i)scanf("%d", &b[i]);for(int i = 1; i <= B; ++ i)scanf("%d", &c[i]);sort(a + 1, a + 1 + R);sort(b + 1, b + 1 + G);sort(c + 1, c + 1 + B);cout << dfs(R, G, B) << endl;return 0;
}

或者也可以写普通的DP

#include <bits/stdc++.h>
#define lowbit(x) ((x)&(-x))
#define mem(i, a) memset(i, a, sizeof(i))
#define sqr(x) ((x)*(x))
#define ls(x) (x << 1)
#define rs(x) (x << 1 | 1)
typedef long long ll;
const double eps = 1e-8;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
const int maxn = 2e2 + 7;
using namespace std;
ll dp[maxn][maxn][maxn];
int arr[3][maxn];
int main(void){#ifdef ljxtt
freopen("data.in", "r", stdin);
#endifint num[3]; for(int i = 0; i < 3; i++) scanf("%d", &num[i]);for(int i = 0; i < 3; i++){for(int j = 0; j < num[i]; j++)scanf("%d", &arr[i][j]);sort(arr[i], arr[i] + num[i], greater<int> ());}ll ans = 0;for(int i = 0; i <= num[0]; i++)for(int j = 0; j <= num[1]; j++)for(int k = 0; k <= num[2]; k++){dp[i + 1][j + 1][k] = max(dp[i + 1][j + 1][k], dp[i][j][k] + 1ll * arr[0][i] * arr[1][j]);dp[i + 1][j][k + 1] = max(dp[i + 1][j][k + 1], dp[i][j][k] + 1ll * arr[0][i] * arr[2][k]);dp[i][j + 1][k + 1] = max(dp[i][j + 1][k + 1], dp[i][j][k] + 1ll * arr[1][j] * arr[2][k]);ans = max(ans, dp[i][j][k]);}printf("%lld\n", ans);return 0;
}

CF1398D Colored Rectangles (记忆化搜索DP)相关推荐

  1. [蓝桥杯][算法提高VIP]夺宝奇兵(记忆化搜索||DP)

    题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...

  2. 【牛客 - 301哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)】小乐乐下象棋(记忆化搜索dp,dfs)

    题干: 小乐乐一天天就知道玩,这一天又想玩象棋. 我们都知道马走日. 现在给定一个棋盘,大小是n*m,把棋盘放在第一象限,棋盘的左下角是(0,0),右上角是(n - 1, m - 1); 小乐乐想知道 ...

  3. UVA10739 String to Palindrome【记忆化搜索+DP】

    In this problem you are asked to convert a string into a palindrome with minimum number of operation ...

  4. BZOJ2246 [SDOI2011]迷宫探险 【记忆化搜索dp + 概率】

    题目 输入格式 输出格式 仅包含一个数字,表示在执行最优策略时,人物活着走出迷宫的概率.四舍五入保留3位小数. 输入样例 4 3 3 2 .$. A#B A#C @@@ 143 37 335 85 9 ...

  5. BZOJ3769:BST again(记忆化搜索DP)

    Description 求有多少棵大小为n的深度为h的二叉树.(树根深度为0:左右子树有别:答案对1000000007取模) Input 第一行一个整数T,表示数据组数. 以下T行,每行2个整数n和h ...

  6. POJ1088 滑雪题解+HDU 1078(记忆化搜索DP)

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  7. 【HDU - 1078】FatMouse and Cheese (记忆化搜索dp)

    题干: FatMouse has stored some cheese in a city. The city can be considered as a square grid of dimens ...

  8. codeforces 1089A.lice the Fan(记忆化搜索dp)

    题解:主要在于第五局的时候比赛次数不一样了,所以多开一维专门代表时候打满了5场. dp[0]代表没打满五场,1代表打满了5场] [胜了wa场] [败了wb场] [共赢了na个球] [共输了nb个球]. ...

  9. HDU1978 记忆化搜索

    How many ways Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

最新文章

  1. C++中给二维指针分配内存
  2. 关于过往与未来的思考
  3. 5.1.5 IO核心子系统
  4. 首次吃了一颗带奶糖味的消炎药,不知道管用不
  5. linux软件包安装及自制yum源
  6. sqlerver 字符串转整型_字符串转换成整型并求和
  7. Leetcode142. Linked List Cycle II环形链表2
  8. Cartesian k-means论文理解
  9. 自定义view:百分比圆弧动画显示
  10. iOS 删除本地文件
  11. 正确修改SATA模式
  12. 转 26款 网络会议/视频会议开源软件
  13. 对网上一些Java笔试题的总结,答案与自我理解(400道)
  14. Mac下安装多个版本的JDK并随意切换
  15. 良心推荐几款好玩的生存类手游:方舟生存进化、饥荒等等
  16. 2023 腾讯暑期实习申请经验分享
  17. vue+elementui实现下拉框及页面刷下
  18. python异步爬虫之线程池
  19. RT-Thread中的链表结构
  20. 免费配音软件大盘点,纯纯的分享

热门文章

  1. 7个最佳的学习Python编程的开源库
  2. 讨论:对于神经网络,不需要弄明白原理,只需要应用,是这样吗?
  3. 使用变量对象引出作用域链
  4. 前端性能优化之gzip
  5. 媒体行业注册什么企业邮箱比较好?
  6. VPC DHCP类型的ECS修改DNS
  7. 百度搜索_如何打开Intellij IDEA的代码提示功能?
  8. 5G:这次中国说了算!
  9. php的基本语法和数据类型
  10. unicode编码过php的magic_quotes_gpc设置为on的mysql注入与文件写入(待测试)