hdu 1160 FatMouse's Speed( 最长下降子序列 )

按要求是将mice的体重m[i].we按小到大排序。

若体重相等,则按速度m[i].sp小到大排序。

m[i].id记录mice输入的位置。

m[i].sp的最长下降子序列。

path[i]记录从 1 ~ i - 1 中 比m[i].sp大的最后一个的位置 ( 排序后的位置 )。

然后递归输出 。。



#include <cstdio>                                                                                                                               
#include <algorithm>
#include <cstring>

using namespace std;

struct MICE {
    int we, sp, id;
}m[1005];

int opt[1005], i, j, path[1005];

bool cmp ( MICE a, MICE b ) {
    if ( a.we == b.we ) return a.sp < b.sp;
    else return a.we < b.we;

}
void out ( int ipo, int p[] ) {
    if ( ipo == 0 ) return;
    out ( p[ipo], p );
    printf ( "%d\n", m[ipo].id );
}

int main ( ) {
    int Case = 1;
    while ( scanf ( "%d%d", &m[Case].we, &m[Case].sp ) != EOF )
        m[Case].id = Case++;
    
    memset ( opt, 0, sizeof ( opt ) );
    memset ( path, 0, sizeof ( path ) );

    sort ( m, m + Case, cmp );

    m[0].sp = 10005;
    for ( i = 1; i < Case; ++i )
        for ( j = i - 1; j >= 0; --j )
            if ( m[j].sp > m[i].sp && opt[j] + 1 > opt[i] ) {
                opt[i] = opt[j] + 1;
                path[i] = j;
            }

    int ans = 0, ii;
    for ( i = 1; i < Case; ++i )
        if ( opt[i] > ans ) {
            ans = opt[i];
            ii = i;
        }

    printf ( "%d\n", ans );
    out ( ii, path );

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值