zoukankan      html  css  js  c++  java
  • HDU1069(还是dp基础)

    今天不想说太多废话~由于等下要写自己主动提交机。

    不知道能不能成功呢?

    题目的意思就是,一个猴子,在叠砖头 ...以下的要严格大于上面的。求叠起来最高能到多少~

    n非常少,n^2算法毫无压力~话说dp的n一般都小。

    我们先排序。拍完序的状态转移方程是:  dp[i]=max(dp[j])+z[i],0<=i<=j。记得要等于。

    之后再线性遍历一下找出max ,不然还是WA~

    还有在读入的时候,一个砖生成六个砖,能够自己暴力模拟一下。我是走循环的~

    这个循环条件我也不知道怎么说。我仅仅是认为推断两两不相等好麻烦,我这个映射在小范围没出现过问题。

    /***********************************************************
    	> OS     : Linux 3.2.0-60-generic #91-Ubuntu
    	> Author : yaolong
    	> Mail   : dengyaolong@yeah.net 
    	> Time   : 2014年06月03日 星期二 07:11:21
     **********************************************************/
    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    using namespace std;
    #define maxn 200
    int x[maxn];
    int y[maxn];
    int z[maxn];
    int dp[maxn];
    int I[maxn];
    int cmp(int i,int j){
        if(x[i]!=x[j]){
           return x[i]<x[j];
        }
        return y[i]<y[j];
    }
    int main(){
    int n,i,j,tmp[3];
        x[0]=y[0]=z[0]=0;
        int sb=1;
        while(cin>>n&&n){
            
            int ind=1;
            for(i=0;i<n;i++){
                for (j=0;j<3;j++){   
                   cin>>tmp[j];
                }
                for(int l=0;l<3;l++)
                for(int k=0;k<3;k++)
                for(int m=0;m<3;m++){
                    if(l*l+k*k+m*m==5){
                     x[ind]=tmp[l]; y[ind]=tmp[k];z[ind]=tmp[m];ind++;
                    }
                    
                }
            }
            for(i=0;i<ind;i++){
                I[i]=i;
            }
            sort(I,I+ind,cmp);
            memset(dp,0,sizeof(dp));
            for(i=0;i<ind;i++){
                int mmax=0;
                for(j=0;j<=i;j++){
                    if(x[I[j]]<x[I[i]]&&y[I[j]]<y[I[i]])
                    mmax=max(dp[I[j]],mmax);
                }
                dp[I[i]]=z[I[i]]+mmax;
            }
            int ans=0;
            for(i=0;i<ind;i++){
                ans=max(ans,dp[i]);
            }
            //for (i=1;i<ind;i++)
            printf("Case %d: maximum height = %d
    ",sb++,ans);
    
    
        }
    
    return 0;
    }
    


  • 相关阅读:
    CTF-域渗透--SSH服务
    CTF-域渗透--SMB信息泄露
    CTF-域渗透--FTP服务后门利用
    Codeforces Round #628 (Div. 2)
    模板
    模板
    Educational Codeforces Round 6
    Educational Codeforces Round 5
    模板
    Codeforces Round #627 (Div. 3)
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7356314.html
Copyright © 2011-2022 走看看