代码实现 C++ 现有 n 个套娃,每个套娃都有各自的长宽高,如果一个套娃的长宽高都大于另外一个套娃则可以将两个套娃套起来。但由于商家的要求,我们只能将序号小的套娃套进序号大的套娃里,也就是序号小的套娃长宽高尺寸小于序号大的套娃才能实现娃套娃。请问最多可以套几层娃。
时间: 2024-02-21 13:58:54 浏览: 171
俄罗斯套娃程序及设计
这个问题可以使用动态规划来解决。首先将所有的套娃按照长宽高的顺序进行排序,然后定义一个数组 dp,其中 dp[i] 表示套娃 i 可以套的最大深度。
接下来我们需要遍历所有的套娃,对于每个套娃 i,我们需要找到所有可以套进套娃 i 里面的套娃 j,并更新 dp[i] 的值为 max(dp[i], dp[j]+1)。最后,dp 数组中的最大值就是可以套的最多层数。
以下是 C++ 代码实现:
```c++
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct Doll {
int w, h, d;
};
bool cmp(const Doll& a, const Doll& b) {
if (a.w == b.w) {
if (a.h == b.h) {
return a.d < b.d;
}
return a.h < b.h;
}
return a.w < b.w;
}
int main() {
int n;
cin >> n;
vector<Doll> dolls(n);
for (int i = 0; i < n; i++) {
cin >> dolls[i].w >> dolls[i].h >> dolls[i].d;
}
sort(dolls.begin(), dolls.end(), cmp);
vector<int> dp(n, 1);
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (dolls[i].w > dolls[j].w && dolls[i].h > dolls[j].h && dolls[i].d > dolls[j].d) {
dp[i] = max(dp[i], dp[j]+1);
}
}
}
int ans = 0;
for (int i = 0; i < n; i++) {
ans = max(ans, dp[i]);
}
cout << ans << endl;
return 0;
}
```
阅读全文