题目描述:
给你一些长方体的积木,问按以下规则能最多垒几个积木。
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; }