zoukankan      html  css  js  c++  java
  • 最大递增子序列变形——二维带权值 O(n*n) HDU1069

    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    int tmp[30][3];
    int dp[100];
    
    class Node
    {
    public:
        int x;
        int y;
        int h;
        bool operator <(const Node&n) const
        {
            if(x==n.x)
                return y<n.y;
            else
                return x<n.x;
        }
    };
    
    Node arr[100];
    int se[100][2];
    
    int main()
    {
        int n;
        int sign=0;
        while(cin>>n&&n!=0)
        {
            sign++;
            int num=0;
            memset(dp,0,sizeof(dp));
            for(int i=0;i<n;i++)
            {
                cin>>tmp[i][0]>>tmp[i][1]>>tmp[i][2];
                sort(tmp[i],tmp[i]+3);
                arr[num].x=tmp[i][2];
                arr[num].y=tmp[i][1];
                arr[num].h=tmp[i][0];
                num++;
                arr[num].x=tmp[i][1];
                arr[num].y=tmp[i][0];
                arr[num].h=tmp[i][2];
                num++;
                arr[num].x=tmp[i][2];
                arr[num].y=tmp[i][0];
                arr[num].h=tmp[i][1];
                num++;
            }
            sort(arr,arr+num);
            for(int i=0;i<num;i++)
            {
                dp[i]=arr[i].h;
                for(int j=0;j<i;j++)
                    if(arr[i].x>arr[j].x&arr[i].y>arr[j].y)
                        dp[i]=max(dp[j]+arr[i].h,dp[i]);
            }
            int mi=0;
            for(int i=0;i<num;i++)
            {
                if(mi<dp[i])
                    mi=dp[i];
            }
            cout<<"Case "<<sign<<": maximum height = "<<mi<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    shell得到两个文件的差集
    shell 单引号&双引号的使用
    kubernetes session and 容器root权限
    docker 使用网络以及容器互联
    倒计时练习
    会话控制
    XML
    AJAX实现搜索智能提示
    弹窗显示详情练习
    三级联动
  • 原文地址:https://www.cnblogs.com/wsruning/p/4668311.html
Copyright © 2011-2022 走看看