描述 套娃游戏大家一定玩过,套娃在嵌套放入的时候,每一个套娃只可以嵌入高度和长度均比它大的套娃内。 现在有一批套娃,给出它们的高度和长度,计算最少能嵌套出几组套娃。 输入描述 第一行为正整数t(≤5),表示数据组数; 每组数据中,第一行为正整数m(≤30000),表示一共有m只套娃; 接下来m行,每行两个正整数wi和hi(wi,hi≤105),分别表示每一只套娃的高度和长度。 输出描述 一共能组成多少套套娃 用例输入 1 2 4 20 30 10 10 30 20 40 50 3 10 30 20 20 30 10 用例输出 1 2 3 c++不用vector
时间: 2024-04-17 19:28:42 浏览: 155
拼图游戏,QT实现,学C++的可以参考下原理
你可以使用数组来解决这个问题。以下是一个使用 C++ 的示例代码:
```cpp
#include <iostream>
#include <algorithm>
struct Doll {
int height;
int length;
};
bool compareDolls(const Doll& doll1, const Doll& doll2) {
if (doll1.height == doll2.height) {
return doll1.length < doll2.length;
}
return doll1.height < doll2.height;
}
int countNestedDolls(Doll dolls[], int n) {
// 按照高度和长度升序排序套娃
std::sort(dolls, dolls + n, compareDolls);
// dp[i] 表示以第 i 只套娃结尾的最长嵌套套娃序列长度
int dp[30001];
int maxLen = 0;
for (int i = 0; i < n; i++) {
dp[i] = 1; // 初始化为 1,至少可以嵌套自己
for (int j = 0; j < i; j++) {
if (dolls[i].length > dolls[j].length) {
dp[i] = std::max(dp[i], dp[j] + 1);
}
}
maxLen = std::max(maxLen, dp[i]);
}
return maxLen;
}
int main() {
int t;
std::cin >> t;
while (t--) {
int m;
std::cin >> m;
Doll dolls[30001];
for (int i = 0; i < m; i++) {
std::cin >> dolls[i].height >> dolls[i].length;
}
int result = countNestedDolls(dolls, m);
std::cout << result << std::endl;
}
return 0;
}
```
这个程序首先根据套娃的高度和长度进行排序,然后使用动态规划来计算最长嵌套套娃序列的长度。最后输出结果即可。
请注意,这个代码示例假设每组数据中的套娃数量不超过 30000。如果有更多套娃,请相应地调整数组的大小。
阅读全文