C - Monkey and Banana HDU - 1069——基础dp

该博客主要探讨了如何运用基础动态规划(DP)解决HDU 1069题——Monkey and Banana的问题。题目要求在满足特定条件(如箱子可以不同面为底、箱子需有序叠放等)的情况下,找出能叠得最高的箱子组合,以求得最大高度。博客提供了被vjudge接受的代码作为解题思路的实例。
摘要由CSDN通过智能技术生成

Think:
1知识点:基础dp
2题意:询问n种箱子在满足
1>可以不同面为底
2>一个叠一个
3>叠的箱子中上面的箱子长和宽都分别严格小于下面的箱子的长和宽
4>无限个箱子
条件下能够叠的最高高度

vjudge题目链接

以下为Accepted代码——基础dp

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

struct Node{
    int x, y, z;
    int w;
    bool operator < (const Node &b) const{
        return w < b.w;
    }
}link[114];

int tp, dp[114];
/*dp[i]:表示前i个状态的最高高度*/

int main(){
    int k = 1, n, i, j, x, y, z, ans, mv;
    while(scanf("%d", &n) && n){
        tp = 0;
        for(i = 1; i <= n; i++){
            scanf("%d %d %d", &x, &y, &z);
            link[tp].x = x, link[tp].y = y, link[tp].z = z, link[tp].w = max(x, y), tp++;
            link[tp].x = x, link[tp].y = z, link[tp].z = y, link[tp].w = max(x, z), tp++;
            link[tp].x = y, link[tp].y = z, link[tp].z = x, link[tp].w = max(y, z), tp++;
        }
        sort(link, link+tp);
        for(i = 0; i < tp; i++)
            dp[i] = link[i].z;
        ans = 0;
        for(i = 1; i < tp; i++){
            mv = 0;
            for(j = i-1; j >= 0; j--){
                if((link[i].x > link[j].x && link[i].y > link[j].y) || (link[i].x > link[j].y && link[i].y > link[j].x)){
                    if(mv < dp[j])
                        mv = dp[j];
                }
            }
            dp[i] += mv;
            ans = max(ans, dp[i]);
        }
        printf("Case %d: maximum height = %d\n", k++, ans);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值