hdu 1160 FatMouse's Speed【dp】

FatMouse's Speed

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 13619    Accepted Submission(s): 5993
Special Judge


Problem Description
FatMouse believes that the fatter a mouse is, the faster it runs. To disprove this, you want to take the data on a collection of mice and put as large a subset of this data as possible into a sequence so that the weights are increasing, but the speeds are decreasing.
 

Input
Input contains data for a bunch of mice, one mouse per line, terminated by end of file.

The data for a particular mouse will consist of a pair of integers: the first representing its size in grams and the second representing its speed in centimeters per second. Both integers are between 1 and 10000. The data in each test case will contain information for at most 1000 mice.

Two mice may have the same weight, the same speed, or even the same weight and speed. 
 

Output
Your program should output a sequence of lines of data; the first line should contain a number n; the remaining n lines should each contain a single positive integer (each one representing a mouse). If these n integers are m[1], m[2],..., m[n] then it must be the case that 

W[m[1]] < W[m[2]] < ... < W[m[n]]

and 

S[m[1]] > S[m[2]] > ... > S[m[n]]

In order for the answer to be correct, n should be as large as possible.
All inequalities are strict: weights must be strictly increasing, and speeds must be strictly decreasing. There may be many correct outputs for a given input, your program only needs to find one. 
 Sample Input
6008 1300
6000 2100
500 2000
1000 4000
1100 3000
6000 2000
8000 1400
6000 1200
2000 1900
 


Sample Output
4
4
5
9
7


 

 

题目大意:一只天真的耗子,认为一只耗子越胖,那么跑的就越快,我们的任务是编写一个程序,找到最长的那个子序列,使得反证耗子越胖,那么跑的越慢,给出一堆数据,处理到文件结束,对于输出,先输出一个整数表示最长子序列长度,之后输出这些数据对应原来数据的位子。

思路:最长递减子序列+记录位子+排序。

首先我们对耗子的体重排序,保证了体重是递增的,之后我们就把这些耗子的速度看成一个序列,找这个序列的最长递减即可,注意体重相等的时候也要判一下。

AC代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
struct zuobiao
{
    int w,v,pos;
}a[100000];
int pre[100000];
int output[100000];
int dp[100000];
int cmp(zuobiao a,zuobiao b)
{
    if(a.w!=b.w)return a.w<b.w;
    else return a.v>b.v;
}
int main()
{
    memset(dp,0,sizeof(dp));
    int cont=1;
    int ww,vv;
    while(~scanf("%d%d",&ww,&vv))
    {
        //if(ww==0&&vv==0)break;
        a[cont].w=ww;
        a[cont].v=vv;
        a[cont].pos=cont;
        pre[cont]=0;
        dp[cont]=1;
        cont++;
    }
    int n=cont-1;
    sort(a+1,a+n+1,cmp);
    dp[1]=1;
    int ans=0;
    int anspos;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<i;j++)
        {
            if(a[i].w>a[j].w&&a[i].v<a[j].v&&dp[i]<dp[j]+1)
            {
                dp[i]=dp[j]+1;
                pre[i]=j;
                if(dp[i]>ans)
                {
                    ans=dp[i];
                    anspos=i;
                }
            }
        }
    }
    int t=anspos;
    int i=0;
    while(t!=0)
    {
        output[i++]=t;
        t=pre[t];
    }
    printf("%d\n",i);
    while(i>0)
    {
        i--;
        printf("%d\n",a[output[i]].pos);
    }
    return 0;
}










1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值