Entrevista con el programador Código de oro-Pregunta de la entrevista 08.13.

1. Título

Pila de cajas. Te doy un montón de n cajas, la caja es ancha, profunda, alta, alta.
Las cajas no se pueden voltear. Al apilar las cajas, el ancho, la altura y la profundidad de la caja inferior deben ser mayores que la caja superior.
Implemente un método para construir la pila de cajas más alta . La altura de la pila de cajas es la suma de la altura de cada caja .

输入使用数组[wi, di, hi]表示每个箱子。

示例1:
 输入:box = [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
 输出:6
 
示例2:
 输入:box = [[1, 1, 1], [2, 3, 4], [2, 6, 7], [3, 4, 5]]
 输出:10
 
提示:
箱子的数目不大于3000个。

Fuente: LeetCode (LeetCode)
Enlace: https://leetcode-cn.com/problems/pile-box-lcci El
copyright pertenece a la red de deducción. Comuníquese con la autorización oficial para la reimpresión comercial e indique la fuente de la reimpresión no comercial.

2. Resolución de problemas

class Solution {
public:
    int pileBox(vector<vector<int>>& box) {
    	sort(box.begin(), box.end(),[&](auto a, auto b) {
    		return a[0] > b[0];//宽降序
    	});
    	int i, j, n = box.size();
    	vector<int> dp(n,0);//以i箱子为顶的最大高度
    	for(i = 0; i < n; ++i)
    	{
    		dp[i] = box[i][2];//初始化自身高度
    		for(j = 0; j < i; ++j)//跟前面的比较
    		{
    			if(box[i][0] < box[j][0] && box[i][1] < box[j][1]
    					&& box[i][2] < box[j][2])//满足条件
    			{
    				dp[i] = max(dp[i], box[i][2]+dp[j]);//可以叠加,取最大的
    			}
    		}
    	}
    	return *max_element(dp.begin(),dp.end());
    }
};

280 ms 16,7 MB

Publicado 849 artículos originales · 2256 aprobado · 440,000 visitas +

Supongo que te gusta

Origin blog.csdn.net/qq_21201267/article/details/105538496
Recomendado
Clasificación