UVA437

来源:互联网 发布:lol美服账号购买 淘宝 编辑:程序博客网 时间:2024/05/16 23:58

题目如下:

https://vjudge.net/problem/UVA-437

利用最长上升子序列的思想便可以解这道题

#include <iostream>#include <algorithm>#include <cstring>#include <climits>using namespace std;  struct node{int x;int y;int z;}; bool cmp(node a,node b)  {      return a.x*b.y<b.x*b.y;  }  const int maxn=200;int dp[maxn];  int main(){//freopen("data.in.txt","r",stdin);int n,ncase=0;while(cin>>n&&n){node inf[maxn];int a,b,c;int num=0;for(int i=0;i<n;i++){cin>>a;cin>>b;cin>>c;inf[num].x=a,inf[num].y=b,inf[num++].z=c;inf[num].x=a,inf[num].y=c,inf[num++].z=b;inf[num].x=b,inf[num].y=a,inf[num++].z=c;inf[num].x=b,inf[num].y=c,inf[num++].z=a;inf[num].x=c,inf[num].y=b,inf[num++].z=a;inf[num].x=c,inf[num].y=a,inf[num++].z=b;}sort(inf,inf+num,cmp);memset(dp,0,sizeof(dp));int res=INT_MIN;for(int i=0;i<num;i++)dp[i]=inf[i].z;for(int i=0;i<num;i++){for(int j=0;j<i;j++){if(inf[i].x>inf[j].x&&inf[i].y>inf[j].y)dp[i]=max(dp[i],dp[j]+inf[i].z);}if(res<dp[i])res=dp[i];}cout<<"Case "<<++ncase<<": maximum height = "<<res<<endl;}return 0;}


原创粉丝点击