九度OJ 1410 垒积木 -- 动态规划

2014-11-24 09:14:02 · 作者: · 浏览: 0

题目描述:

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

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

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

输入:

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

输出:

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

样例输入:
35 2 14 2 13 3 131 5 15 1 12 2 2
样例输出:
21
状态转移方程为:

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 
  
   
#include 
   
     #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
    
      max) max = dp[i][j][k]; } } } printf (%d , max); } return 0; }