CF1398D Colored Rectangles (记忆化搜索DP)
数据范围只有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)相关推荐
- [蓝桥杯][算法提高VIP]夺宝奇兵(记忆化搜索||DP)
题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...
- 【牛客 - 301哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)】小乐乐下象棋(记忆化搜索dp,dfs)
题干: 小乐乐一天天就知道玩,这一天又想玩象棋. 我们都知道马走日. 现在给定一个棋盘,大小是n*m,把棋盘放在第一象限,棋盘的左下角是(0,0),右上角是(n - 1, m - 1); 小乐乐想知道 ...
- UVA10739 String to Palindrome【记忆化搜索+DP】
In this problem you are asked to convert a string into a palindrome with minimum number of operation ...
- BZOJ2246 [SDOI2011]迷宫探险 【记忆化搜索dp + 概率】
题目 输入格式 输出格式 仅包含一个数字,表示在执行最优策略时,人物活着走出迷宫的概率.四舍五入保留3位小数. 输入样例 4 3 3 2 .$. A#B A#C @@@ 143 37 335 85 9 ...
- BZOJ3769:BST again(记忆化搜索DP)
Description 求有多少棵大小为n的深度为h的二叉树.(树根深度为0:左右子树有别:答案对1000000007取模) Input 第一行一个整数T,表示数据组数. 以下T行,每行2个整数n和h ...
- POJ1088 滑雪题解+HDU 1078(记忆化搜索DP)
Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...
- 【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 ...
- codeforces 1089A.lice the Fan(记忆化搜索dp)
题解:主要在于第五局的时候比赛次数不一样了,所以多开一维专门代表时候打满了5场. dp[0]代表没打满五场,1代表打满了5场] [胜了wa场] [败了wb场] [共赢了na个球] [共输了nb个球]. ...
- HDU1978 记忆化搜索
How many ways Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
最新文章
- C++中给二维指针分配内存
- 关于过往与未来的思考
- 5.1.5 IO核心子系统
- 首次吃了一颗带奶糖味的消炎药,不知道管用不
- linux软件包安装及自制yum源
- sqlerver 字符串转整型_字符串转换成整型并求和
- Leetcode142. Linked List Cycle II环形链表2
- Cartesian k-means论文理解
- 自定义view:百分比圆弧动画显示
- iOS 删除本地文件
- 正确修改SATA模式
- 转 26款 网络会议/视频会议开源软件
- 对网上一些Java笔试题的总结,答案与自我理解(400道)
- Mac下安装多个版本的JDK并随意切换
- 良心推荐几款好玩的生存类手游:方舟生存进化、饥荒等等
- 2023 腾讯暑期实习申请经验分享
- vue+elementui实现下拉框及页面刷下
- python异步爬虫之线程池
- RT-Thread中的链表结构
- 免费配音软件大盘点,纯纯的分享