• dp求顺序hdu1160


    题意是仅仅求一次的顺序。先依照速度从大到小排序,速度想等到按体重增序排列。

    然后基本就变成了求已定顺序序列的最长递增序列递增,跟那个求一致最大序列和的基本一致。

    dp【i】里存储的是到当前i最大的递增序列个数最大的数。

    dp[i+1]就是在a【i+1】大于前面的a【j】的情况下,dp【i+1】=dp【j】+1;

    输出的就是从最大的dp【】值从后往前输出,所以用了个栈改成从前往后。

    以为题意仅仅输出一个正确序列就好。

    思路是从開始的结构体排序。打一打就想出来的。bug,调了一天。确定dp【】最大值得时候和

    须要记录角标。開始就弄混了,这个bug也是通过出数据找出来的。

    第一次交没有输出序列个数,wa了2次。

    ac代码:

    #include<cstdio>
    #include<algorithm>
    #include<stack>
    using namespace std;
    stack<int > s;
    
    struct mice
    {
        int x,y,z;
        bool operator < (const mice&b ) const{
    
            if(y==b.y) return x<b.x;
            return y>b.y;
        }
    }a[1010];
    int dp[1010];
    int main()
    {
        int i=0;
        while(scanf("%d%d",&a[i].x,&a[i].y)!=EOF) {  a[i].z=i+1; i++; }
    //    printf("
    ");
    
    //    printf("i==%d
    ",i);
    
        sort(a,a+i);
    
    
    //    for(int j=0;j<i;j++) printf("%d  %d  %d
    ",a[j].x,a[j].y,a[j].z);
    
        int maxx = 0,maxIndex=0;
    
        for(int j=0;j<i;j++)
        for(int k=0;k<j;k++){
            if(a[k].x<a[j].x ) dp[j]=max(dp[k]+1,dp[j]);
            if(dp[j]>maxx) { maxx = dp[j]; maxIndex = j; }
    
        }
    //    printf("maxx==%d
    ",maxx);
    
    //    for(int j=0;j<i;j++) printf("%d  ",dp[j]);
    //    printf("
    ");
    
    
    //    printf("%d
    ",a[maxx].z);
    //    printf("%d
    ",dp[maxx]+1);
        s.push(a[maxIndex].z);
            printf("%d
    ",dp[maxIndex]+1);
    //        printf("%d
    ",a[maxIndex].z);
        dp[maxIndex]-=1;
        for(int k=maxIndex-1;k>=0;k--){
    
            if(dp[k]==dp[maxIndex]){
    //                printf("%d
    ",dp[k]);
    //            printf("%d
    ",a[k].z);
    
                s.push(a[k].z);
                dp[maxIndex]-=1;
            }
        }
    
        while(!s.empty()){
            printf("%d
    ",s.top());
            s.pop();
        }
    
    
    
    
        return 0;
    }
    /**
    1 5
    1 3
    2 4
    2 2
    3 3
    4 4
    1 3
    4 2
    5 1
    ^Z
    
    1  5  1
    2  4  3
    4  4  6
    1  3  2
    1  3  7
    3  3  5
    2  2  4
    4  2  8
    5  1  9
    0  1  2  0  0  2  1  3  4
    4
    5
    3
    1
    */
    /**
    1 5
    1 3
    2 4
    2 2
    3 3
    4 4
    1 3
    4 2
    5 1
    ^Z
    
    1  5  1
    2  4  2
    3  3  3
    4  2  4
    5  1  5
    0  1  2  3  4
    5
    1
    2
    3
    4
    5
    
    */
    


  • 相关阅读:
    C# Redis实战(四)
    C# Redis实战(三)
    C# Redis实战(二)
    C# Redis实战(一)
    C#连接内存数据库redis【1、Redis存读取数据】
    C#连接内存数据库redis【1、安装配置】
    c#根据配置文件反射
    内存数据库:Redis与Memcached的区别
    内存数据库:memcached与redis技术的对比试验
    【转】【涨姿势】支付宝怎么做风险控制?
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6881693.html
Copyright © 2020-2023  润新知