《动态规划》hdoj 1160 最长上升子序列+根据变量qsort结构体

#include<stdio.h>
#include<stdlib.h>
typedef struct
{
    int w;
    int s;
    int num;
    int pre;
}dot;
int cmp(const void*a,const void *b)
{
    return (*(dot *)a).w - (*(dot *)b).w;
}
int main()
{
    dot que[1005];
    int number[1005],ans[1005];
    int n=0,i,j;
    while(scanf("%d%d",&que[n].w,&que[n].s)!=EOF)
        n++;
    for(i=0;i<=n;i++)
    {
        que[i].num=i;
        que[i].pre=i;
        number[i]=1;
    }
    n++;
    qsort(que,n,sizeof(dot),cmp);
    for(i=0;i<n;i++)
    {
        for(j=0;j<i;j++)
        {
            if(que[j].s>que[i].s&&number[i]<=number[j])
            {
                number[i]=number[j]+1;
                que[i].pre=j;
            }
        }
    }
    int u=0;
    int max=0;
    int k=0;
    for(i=n-1;i>=0;i--)
    {
        if(number[i]>max)
        {
            max=number[i];
            u=i;
        }
    }
    while(max--)
    {
        ans[k]=que[u].num;
        k++;
        u=que[u].pre;
    }
    printf("%d\n",k);
    for(i=k-1;i>=0;i--)
        printf("%d\n",ans[i]+1);
    return 0;
}

你可能感兴趣的:(《动态规划》hdoj 1160 最长上升子序列+根据变量qsort结构体)