2009腾讯创新技术大赛 Problem B: Doudou

Problem B: Doudou
Time Limit: 1000MSMemory Limit: 65536K
Total Submissions: 1773Accepted: 184

Description

有只企鹅叫豆豆,总是被别的企鹅欺负。豆豆在长期的隐忍之后,掌握了所有企鹅的高度和攻击力强度,还得到了一把黄金剑。在拥有了黄金剑以后,豆豆终于可以展开绝地大反击。但这把黄金剑的用法却很奇怪。

首先,豆豆第一次可以选择任何一只企鹅开始挑战。豆豆这一次必胜。

再次,当豆豆已经挑战过某一只企鹅后,再下一次的挑战对象只能是比上一名对手高,且比上一名对手攻击力强的企鹅。这样豆豆必胜。否则黄金剑会觉得打的没意思而故意发脾气输掉。豆豆还会被大家集体暴打。

面对着这把脾气很大的黄金剑,豆豆想请你帮助他计算一下,他最多可以连续击败多少只企鹅?

Input

第一行:一个数据 n,代表企鹅群里除了豆豆一共有 n(1 ≤ n ≤ 1000)只企鹅。
第2至第 n+1行:每行2个数字。第 i+1行的第一个数字为企鹅 i的高度。第 i+1行的第二个数字为企鹅 i的攻击力。0 ≤ 高度,攻击力 ≤ 1,000,000。

Output

一个数。代表豆豆最多可以连续击败的企鹅数。

Sample Input

 
 
Sample Input #1Sample Input #2
3
1 3
3 2
2 4
5
10 1
9 2
7 3
6 4
5 5

#include  < iostream >
#include 
< algorithm >
#define  MAX 1002
using   namespace  std;
struct  node
{
    
int  h;
    
int  p;
}data[MAX];
bool  comp(node a,node b)
{
    
return  a.h < b.h;
}
int  dp[MAX],n,MM;
void  LongSub()
{
    
int  mmax,i,j;
    MM
= 0 ;
    
for (i = 1 ;i <= n;i ++ )
    {
        mmax
= 0 ;
        
for (j = 1 ;j < i;j ++ )
        {
            
if (data[j].p < data[i].p && dp[j] > mmax && data[j].h < data[i].h)
            {
                mmax
= dp[j];
            }
        }
        dp[i]
= mmax + 1 ;
        
if (dp[i] > MM)
            MM
= dp[i];
    }
    printf(
" %d\n " ,MM);
}
int  main()
{
    
int  i = 1 ;
    cin
>> n;
    
for (i = 1 ;i <= n;i ++ )
        scanf(
" %d%d " , & data[i].h, & data[i].p);
    sort(data
+ 1 ,data + n + 1 ,comp);
    LongSub();
}

Sample Output

 
 
Sample Output #1Sample Output #2
21

[Submit]  

 

转载于:https://www.cnblogs.com/forever4444/archive/2009/05/09/1453236.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值