给n个信封的长度和宽度。如果信封A的长和宽都小于信封B,那么信封A可以放到信封B里,请求出信封最多可以嵌套多少层。
class Solution {
public:
static bool cmp (const vector<int> a,const vector<int> b)
{
if(a[0]!=b[0])
return a[0]<b[0];
else
return a[1]<b[1];
}
int process(vector<vector<int> >& letters, int len,int wide,int times,int index)
{
if(index==letters.size())
return times;
if(len>=letters[index][0] || wide>=letters[index][1])
return process(letters,len,wide,times,index+1);
// 要当前的信封
int letterin=process(letters,max(len,letters[index][0]),max(wide,letters[index][1]),times+1,index+1);
// 不要当前的信封
int letterout=process(letters,len,wide,times,index+1);
return max(letterin,letterout);
}
int maxLetters(vector<vector<int> >& letters) {
// 首先对 lectters 排序
sort(letters.begin(),letters.end(),cmp);
int count = process(letters,0,0,0,0);
return count;
}
};