時間限制: 1 sec
記憶體限制: 128 mb
有n個矩形,每個矩形可以用兩個整數a,b描述,表示它的長和寬。矩形x(a, b)可以巢狀在矩形y(c,d)中當且僅當a你的任務是選出盡量多的矩形排成一行,使得除了最後乙個外,每乙個矩形都可以巢狀在下乙個矩形內。
第1行:1個整數n(1<=n<=1000)
第2..n+1行:每行2個整數,分別表示矩形的兩個邊長。每個矩形依次編號為1~n。
第1行:1個整數k,表示巢狀的最大層數。
第2行:k個整數,表示依次巢狀的矩形的編號。若有多組解,輸出字典序最小的一組解。
814 9
15 19
18 12
9 10
19 17
15 9
2 13
13 10
4本可按長排序後,以寬作乙個最長上公升子串行問題,但由於長寬可互換問題,博主的做法是將矩形長寬交換複製乙份後再做,**如下。4 8 3 2
#include#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3f
#define ll long long int
ll getint()
return ans*f;
}using namespace std;
struct square
square(int a,int b,int c)
square rev()
bool operator<(const square &rhs)const
}s[2016];
int ans[2016],fa[2016],an=1;
void p(int d)
}int main()
sort(s+1,s+2*n+1);
for(i=1;i<=2*n;++i)
for(j=1;js[i].x&&s[j].y>s[i].y&&ans[j]+1>=ans[i])
printf("%d\n",ans[an]);
for(i=an;fa[i];i=fa[i])
printf("%d ",s[i].k);
printf("%d\n",s[i].k);
}
基礎演算法 巢狀矩形
有n個矩形,每個矩形可以用兩個整數a,b描述,表示它的長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a你的任務是選出盡量多的矩形排成一行,使得除了最後乙個外,每乙個矩形都可以巢狀在下乙個矩形內。第1行 1個整數n 1 n 1000 第2.n 1行 每行2個整數,分別表示矩形的兩個邊長。...
矩形巢狀 DP
原先沒看出來,後來發現和議題很像,都是胴體規劃,那題是給你一些點的座標,找到最多的點連成的顯示單調的 include includestruct asd ju 1010 int cmp const void a,const void b int qian int j,int i void sol i...
矩形巢狀 DAG LIS
矩形巢狀 描述有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a如果矩形x可以巢狀在矩形y裡,我們就從x到y連一條有向邊,最後會形成乙個dag。include include include using namespace std const ...