记录编号 |
458217 |
评测结果 |
AAAAAAAAAAA |
题目名称 |
[USACO Jan07] 干草塔 |
最终得分 |
100 |
用户昵称 |
WHZ0325 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.004 s |
提交时间 |
2017-10-10 17:02:54 |
内存使用 |
0.31 MiB |
显示代码纯文本
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
struct rec {
int w;
int l;
} arr[20];
bool cmp(rec a,rec b) {
if(a.w==b.w) {
return a.l>b.l;
}
return a.w>b.w;
}
vector<int> g[20];
void check_and_connect(int a,int b) {
if(arr[a].w>arr[b].w&&arr[a].l>arr[b].l) {
g[a].push_back(b);
}
}
int d[20];
int dp(int x) {
if(d[x]!=-1) {
return d[x];
}
d[x]=1;
for(int i=0;i<g[x].size();i++) {
d[x]=max(d[x],dp(g[x][i])+1);
}
return d[x];
}
int main() {
freopen("btwr.in","r",stdin);
freopen("btwr.out","w",stdout);
int n;
scanf("%d",&n);
int w,l;
for(int i=0;i<n;i++) {
scanf("%d%d",&arr[i].w,&arr[i].l);
}
sort(arr,arr+n,cmp);
for(int i=0;i<n;i++) {
for(int j=i+1;j<n;j++) {
check_and_connect(i,j);
}
}
memset(d,-1,sizeof(d));
int ans=1;
for(int i=0;i<n;i++) {
ans=max(ans,dp(i));
}
printf("%d\n",ans);
fclose(stdin);
fclose(stdout);
return 0;
}