zoukankan      html  css  js  c++  java
  • 九度OJ 1410 垒积木 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1410

    题目描述:

    给你一些长方体的积木,问按以下规则能最多垒几个积木。

    1 一个积木上面最多只能垒另一个积木。

    2 在下面的积木的长宽高要大于或等于上面的积木的长宽高

    输入:

    输入有多组,每组输入第一行是一个整数n(1<=n<=1000000),接下来n行的每行包括三个整数l,w,h(1 <= w,l,h <= 100),表示积木的长宽高。

    输出:

    对于每组输入,输出按规则最多能垒几个积木。

    样例输入:
    3
    5 2 1
    4 2 1
    3 3 1
    3
    1 5 1
    5 1 1
    2 2 2
    样例输出:
    2
    1
    状态转移方程为:

    dp[i][j][k] = max{ dp[i-1][j][k], dp[i][j-1][k], dp[i][j][k-1] } +hash[i][j][k],其中hash[i][j][k]表示长为i、宽为j、高为k的积木的个数。

    #include <stdio.h>
    #include <string.h>
     
    #define MAX 101
     
    int Max (int a, int b, int c){
        a = (a > b) ? a : b;
        a = (a > c) ? a : c;
        return a;
    }
     
    int main(void){
        int n;
        int hash[MAX][MAX][MAX];
        int dp[MAX][MAX][MAX];
        int length;
        int width;
        int height;
        int i;
        int j;
        int k;
        int max;
     
        while (scanf ("%d", &n) != EOF){
            memset (hash, 0, sizeof(hash));
            memset (dp, 0, sizeof(dp));
            for (i=0; i<n; ++i){
                scanf ("%d%d%d", &length, &width, &height);
                ++hash[length][width][height];
            }
            max = 0;
            for (i=1; i<MAX; ++i){
                for (j=1; j<MAX; ++j){
                    for (k=1; k<MAX; ++k){
                        dp[i][j][k] = Max (dp[i-1][j][k], dp[i][j-1][k], dp[i][j][k-1]) + hash[i][j][k];
                        if (dp[i][j][k] > max)
                            max = dp[i][j][k];
                    }
                }
            }
            printf ("%d
    ", max);
        }
        return 0;
    }


  • 相关阅读:
    Spyder | 关于报错No module named 'PyQt5.QtWebKitWidgets'
    Java基础(11) | 接口
    Java基础(10) | 抽象
    Java基础(9) | 继承
    Java基础(7) | String
    Java基础(6) | ArrayList
    CodeBlocks17.12配置GNU GCC + 汉化
    图片懒加载
    Mac安装Mysql 超详细(转载)
    剑指 Offer 03. 数组中重复的数字
  • 原文地址:https://www.cnblogs.com/liushaobo/p/4373795.html
Copyright © 2011-2022 走看看