FatMouse's Speed

来源:互联网 发布:神印王座坐骑进阶数据 编辑:程序博客网 时间:2024/05/18 23:12

题目要求:http://acm.hdu.edu.cn/showproblem.php?pid=1160

思路: 运用结构体,对两个分别排序



#include <iostream>#include<string.h>using namespace std;//int a[10] = {6,5,4,2,9,1,5,12,3,2};int f[1002];int l[1002];//表示路径。int e = 0;struct M{    int w,s,l;}mouse[1002];void printl(int e,M a[])//用于打印路径{    if(l[e] != -1)        printl(l[e],a);    cout<<a[e].l+1<<endl;} int LC(M a[],int N)  //找最长递减子序列。 {    int i;    memset(l,-1,sizeof(l));  //memset 只能初始化0 和-1.    memset(f,0,sizeof(f));    f[0] = 1;    int max = f[0];    for(i = 1; i<N; i++)    {        for(int j = 0; j<i; j++)            if(a[i].s < a[j].s && f[i]<f[j])//a[j]<a[i]:递增子序列;a[j]<=a[i]不减子序列            {                       //a[j]>a[i]:递减子序列;a[j]>=a[i]不增子序列                f[i] = f[j];                l[i] = j;            }        f[i] ++;  //将自身加上。        if(max<f[i])        {             max = f[i];             e = i;  //现在路径的end 位置。        }    }    cout<<max<<endl;    printl(e,a);    return 0; }void quicksort(M a[],int n){    for(int i = 1; i<= n-1; i++)    {        int k = i-1;        for(int j = i; j<n; j++)        if(a[j].w<a[k].w)            k = j;        if(k != (i-1))       {            swap(a[i-1].w,a[k].w);            swap(a[i-1].s,a[k].s);            swap(a[i-1].l,a[k].l);       }    }}int main(){    int i = 0;    while(cin>>mouse[i].w >>mouse[i].s)    {        mouse[i].l = i;        i++;    }    quicksort(mouse,i);    LC(mouse,i);    return 0;}


原创粉丝点击