您的位置:首页 > 其它

HDU1069-LIS变形-Monkey and Banana

2017-07-18 20:57 405 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1069

我又开始热爱这个世界了。

给定m,然后是 m个长方体,分别给a,b,c,是长宽高。

让你曡这些长方体,要求下面的那个长度和宽度不能比上面的小,

每个长方体可以供应好多(意思就是可以每个都可以换种姿势摆。)

问你最大的高度。

数据小于30,所以我就枚举所有种情况,然后按照最长上升子序列的思想,给搞一搞。

wa了两次。。输出没有控制。qwq

#include <bits/stdc++.h>
using namespace std;
const int maxn=2000;
vector<pair<pair<int,int>,int> >q;
bool cmp2(pair<pair<int,int>,int>a,pair<pair<int,int>,int>b){
if(a.first.first==b.first.first)
return a.first.second>b.first.second;
return a.first.first>b.first.first;
}
int dp[maxn];
int main()
{   int t;
int a,b,c;
int ff=1;
while(~scanf("%d",&t)){
if(!t) break;
q.clear();
for(int i=0;i<t;i++){
scanf("%d%d%d",&a,&b,&c);
q.push_back(make_pair(make_pair(a,b),c));
q.push_back(make_pair(make_pair(b,a),c));
q.push_back(make_pair(make_pair(a,c),b));
q.push_back(make_pair(make_pair(c,a),b));
q.push_back(make_pair(make_pair(c,b),a));
q.push_back(make_pair(make_pair(b,c),a));
}
sort(q.begin(),q.end(),cmp2);
int ans=-1;
//for(int i=0;i<q.size();i++)
//printf("%d  %d  %d  %d\n",i+1,q[i].first.first,q[i].first.second,q[i].second);
memset(dp,0,sizeof(dp));
for(int i=0;i<q.size();i++){
dp[i]=q[i].second;
for(int j=0;j<i;j++){
if(q[i].first.first<q[j].first.first&&q[i].first.second<q[j].first.second)
dp[i]=max(dp[j]+q[i].second,dp[i]);
}
if(ans<dp[i])
{ans=max(dp[i],ans);
}
}
//for(int i=0;i<q.size();i++)
//printf("%d\n",dp[i]);
printf("Case %d: maximum height = %d\n",ff++,ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: