问题标题: 酷町堂:1526 最长的降序序列

0
0
已解决
黄俊博
黄俊博
资深光能
资深光能

 

1526最长的降序序列

#include<iostream>
using namespace std;

int n;
int a[1001],b[1001],count;

int main()
{  
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>b[i];
    for(int i=1;i<=n;i++)a[i]=1;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<i;j++)
        {
            if(b[i]>b[j])
            {
                a[i]=a[j]+1;
            }       
        }
    }
    int maxv=0;
    for(int i=1;i<=n;i++)
    {
        maxv=max(maxv,a[i]);
    }
    for(int i=1;i<=n;i++)
    {
        //if(maxv==a[i])count++;
        cout<<a[i]<<" ";
         
    }
    cout<<maxv<<" "<<count<<endl;;
    return 0;
}


0
已采纳
王星河
王星河
资深光能
资深光能

@黄俊博 这里有图

0
0
黄俊博
黄俊博
资深光能
资深光能

@蒋智航 @方亦欧 @梁彦博 @梁锦程 @杨舰中 

黄俊博在2018-03-01 20:21:49追加了内容

@张睿杰@陆麟瑞

0
0
夏子健
夏子健
初级光能
初级光能

f[n]=1;
    b[n]=1;
    maxlen=1;
    for(int i=n-1;i>=1;i--)
    {  
        int last=0;
        f[i]=1;
        b[i]=1;
        for(int j=i+1;j<=n;j++)
        { if(a[i]>a[j])
            {
                if(f[j]+1>f[i])
                {
                    f[i]=f[j]+1;
                    b[i]=b[j];
                    last=j;
                }
                else if(f[j]+1==f[i]&&a[last]!=a[j])
                    {
                        b[i]+=b[j];
                        last=j;
                    }
            }
        }
        if(f[i]>maxlen)
        maxlen=f[i];
    }
    int last=0;
    for(int i=1;i<=n;i++)
    {
        if(f[i]==maxlen&&a[i]!=a[last])
        {
            maxcount+=b[i];
            last=i;
        }
    }
 

0
0
我要回答