请用c++代码编写:小明有很多个矩形,他们可能有不同的长和宽,现在, 小明需要在矩形中放入矩形,他想在一个大的矩形中放入两个较小的矩形,就像如图这样: 现在给出小明所拥有的矩阵,请你选出3个,使得这3个矩阵可以像上面这张图一样,一个套两个,输出总方案数。 输入说明 输入共有多行。第一行为一个整数N(1<=N<=50),表示矩阵的个数。之后N行,每行两个整数,表示矩阵的长和宽。(长宽小等于1000) 输出说明 输出一个整数,表示合法矩形的方案数。
时间: 2024-01-21 11:20:12 浏览: 215
以下是C++代码实现:
```
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN = 55;
struct Rectangle{
int w, h;
}rect[MAXN];
int n, ans = 0;
bool used[MAXN];
void dfs(int cnt, int w1, int h1, int w2, int h2){
if(cnt == 3){
if(w1 == w2 && h1 + h2 == w1) ans++; //判断是否符合条件
return;
}
for(int i = 1; i <= n; i++){
if(!used[i]){
used[i] = true;
if(w1 >= rect[i].w && h1 >= rect[i].h) dfs(cnt+1, w1, h1, w2, h2); //放入第一块矩形
if(w1 >= rect[i].h && h1 >= rect[i].w) dfs(cnt+1, w1, h1, w2, h2); //放入第一块矩形
if(w2 >= rect[i].w && h2 >= rect[i].h) dfs(cnt+1, max(w1, rect[i].w), h1+rect[i].h, w2, h2); //放入第二块矩形
if(w2 >= rect[i].h && h2 >= rect[i].w) dfs(cnt+1, max(w1, rect[i].h), h1+rect[i].w, w2, h2); //放入第二块矩形
used[i] = false;
}
}
}
int main(){
cin >> n;
for(int i = 1; i <= n; i++){
cin >> rect[i].w >> rect[i].h;
}
memset(used, false, sizeof(used));
dfs(0, 0, 0, 0, 0);
cout << ans << endl;
return 0;
}
```
思路解析:
这道题目可以使用 DFS(深度优先搜索)实现,对于每一个矩形,我们可以选择将其放入第一块矩形中或者第二块矩形中,然后递归搜索下一个矩形的情况,直到选出三个矩形为止。最后,我们只需要判断选出的三个矩形是否符合条件即可。
代码实现中,我们使用一个结构体表示每个矩形的长和宽,用一个布尔数组记录每个矩形是否被使用过,然后使用 dfs 函数进行模拟。dfs 函数的参数 cnt 表示已经选出的矩形个数,参数 w1 和 h1 表示第一块矩形的长和宽,参数 w2 和 h2 表示第二块矩形的长和宽。在 dfs 函数中,我们首先判断当前选出的矩形个数是否达到了三个,如果是,则判断是否符合条件,如果符合,则方案数加一。接着,我们遍历每一个矩形,如果该矩形没有被使用过,则分别考虑将其放入第一块矩形或者第二块矩形中,然后递归搜索下一个矩形的情况。最后,记得将该矩形的使用状态重置。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![h](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)