“kuangbin带你飞”专题计划——专题十二:基础DP1

写在前面

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;
}

4.Doing Homework HDU - 1074

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 将一个数组变成 严格&不严格,不递增&不递减 的数组的最小代价

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值