写在前面
1.开始时间:2021-05-27
2.专题传送门:[kuangbin带你飞]专题1-23
3.题意题解贡献:kuangbin 专题十二 基础DP1
4.我的总结:DP基础知识总结
题目:
1.(题解传送门)Max Sum Plus Plus HDU - 1024 :连续的n个数中求出和最大的不相交的m段+DP空间优化(不停学习更多的dp方式)
2.(不需要题解)Ignatius and the Princess IV HDU - 1029 :找出数组中出现次数>=(n+1)/2的数。(大水题)
3.(不需要题解)Monkey and Banana HDU - 1069 :(依旧大水题)给n<=30个长方体的长,宽,高,每种可以无限个,而且可以任意翻转,问最高能堆成多高的梯子(上面的长方体的长,宽严格小于下面的长宽):一种拓展成3种,然后排序,一个二重循环就ok了。下面还是简单贴个代码
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <string>
using namespace std;
const int N = 30 * 6 + 10;
struct node {
int a, b, c;
node(int a = 0, int b = 0, int c = 0) : a(a), b(b), c(c) {}
bool operator<(node t) const {
if (a == t.a)
return b > t.b;
else
return a > t.a;
}
} s[N];
int n, a, b, c, dp[N];
int cnt;
signed main() {
int cas = 0;
while (cin >> n) {
if (n == 0) break;
memset(dp, 0, sizeof(dp));
cnt = 0;
int i, j;
for (i = 1; i <= n; i++) {
scanf("%d%d%d", &a, &b, &c);
s[++cnt] = node(max(a, b), min(a, b), c);
s[++cnt] = node(max(a, c), min(a, c), b);
s[++cnt] = node(max(b, c), min(b, c), a);
}
sort(s + 1, s + 1 + cnt);
//不必特意找bug,先把整体结构写出来,在这个过程中,可能很多bug不用可以去找就能解决了;另外如果发现方法不对,也可以节约时间。
// for (i = 1; i <= cnt; i++) {
// printf(":::%d %d %d %d\n", i, s[i].a, s[i].b, s[i].c);
// }
for (i = 1; i <= cnt; i++) {
dp[i] = s[i].c;
for (j = i - 1; j >= 1; j--) {
if (s[i].a < s[j].a && s[i].b < s[j].b)
dp[i] = max(dp[i], dp[j] + s[i].c);
}
}
int mx = 0;
for (i = 1; i <= cnt; i++) mx = max(mx, dp[i]);
printf("Case %d: maximum height = %d\n", ++cas, mx);
}
return 0;
}
5.(不需要题解)Super Jumping! Jumping! Jumping! HDU - 1087 :和HDU1069几乎一样的题,就是变了个壳子。
6.(不需要题解)Piggy-Bank HDU - 1114 :裸的完全背包问题,题意需要注意一下。
7.(不需要题解)免费馅饼 HDU - 1176 :简单DP(需要刷的DP题还多,这么简单的DP就不必写博客了。总结下基础知识到DP基础知识总结就OK了)
8.(不需要题解)Tickets HDU - 1260 :就是个和走楼梯一样的简单dp
9.(题解传送门)最少拦截系统 HDU - 1257 :最长上升子序列——O(nlogn)
10.(不需要题解)FatMouse's Speed HDU - 1160 :水题pass(又是HDU-1069一类的题)
11.Jury Compromise POJ - 1015 :
12.(不需要题解)Common Subsequence POJ - 1458 :最长公共子序列模板题(已经总结在经典例题中)
13.(不需要题解)Help Jimmy POJ - 1661 :认真读题就Ok
14.(不需要题解)Longest Ordered Subsequence POJ - 2533 :最长不上升/下降子序列(已经总结在经典例题中)
15.(题解传送门)Treats for the Cows POJ - 3186 :双端队列有权取数+区间DP
16.(题解传送门)FatMouse and Cheese HDU - 1078 :记忆化搜索+拓扑排序
17.(题解传送门)Phalanx HDU - 2859 :矩形中求最大的对称正方形
18.(不需要题解)Milking Time POJ - 3616 :有点儿意思,G++过得了,C++却runtime erorr。不知道哪里的问题,有这个意识吧——实在检查不出来就试试换一种编译器(C++/G++)。
19.(题解传送门)Making the Grade POJ - 3666 :将一个数组变成 严格&不严格,不递增&不递减 的数组的最小代价