博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU FatMouse's Speed
阅读量:6195 次
发布时间:2019-06-21

本文共 2899 字,大约阅读时间需要 9 分钟。

FatMouse's Speed

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 177 Accepted Submission(s): 90
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 13006000 2100500 20001000 40001100 30006000 20008000 14006000 12002000 1900
 
Sample Output
44597
分析:
首先按照关键字W升序进行排序,然后S[i]从1到i-1(是指外层循环中的第i个元素)开始遍历,
找到w[i]>w[k],s[i]
动态规划状态方程为:f[i] = max(f[k]+1,f[i]),1<=k
这里定义了一个struct mice 其中的len代表当前元素的状态长度,用来找到找到最长的,
index用来记忆当前元素的真实下标,在排序后还能找到元素的下标。
before用来找的当前元素的上一个元素的下标。
#include <iostream>
#include <stdlib.h>
using namespace
 std;
typedef struct
{
    int
 w,s;
    int
 len,index;
    int
 before;
}
mice;
int
 cmp(const void *a,const void *b)
{
    mice c = *(mice *)a;
    mice d = *(mice *)b;
    if
(c.w==d.w)
    return
 d.s - c.s;
    else return
 c.w - d.w;
}
int
 main()
{
    mice m[10001];
    int
 i = 1,flag,max=0,f[1001];
    while
(cin>>m[i].w>>m[i].s)
    {
        m[i].index = i;
        m[i].len=0;
        m[i].before=0;
        i++;
    }
    //cout<<i<<endl;
    qsort(m,i-1,sizeof(m[1]),cmp);
    for
(int j = 1;j < i ;j++)
    {
        for
(int k = 1; k< j;k++)
        {
            if
(m[j].w>m[k].w&&m[j].s<m[k].s)
            {
                if
(m[j].len<m[k].len+1)
                {
                    m[j].len = m[k].len+1;
                    m[j].before = k;
                    if
(m[j].len>=max)
                    {
                        max = m[j].len;
                        flag = j;
                    }
                }
            }
        }
    }
    cout<<max+1<<endl;
    f[1] = m[flag].index;
    i=2;
     while
(m[flag].before!=0)
    {
        flag = m[flag].before;
        f[i] = m[flag].index;
        i++;
    }
    for
(int j = i-1 ; j >=1 ; j--)
    {
        cout<<f[j]<<endl;
    }
   // for(int j = 1 ; j < i ;j++)
   // cout<<m[j].index<<" "<<m[j].w<<" "<<m[j].s<<endl;
    return 0;
}
本文转自NewPanderKing51CTO博客,原文链接: 
http://www.cnblogs.com/newpanderking/archive/2011/08/04/2126977.html
,如需转载请自行联系原作者
你可能感兴趣的文章
SQL-with as基本用法(源码DEMO)
查看>>
深度学习入门和学习书籍
查看>>
由struct 和class 想到的浅度复制和深度复制 c#
查看>>
云计算时代的运维职位展望
查看>>
JQuery实现ajax批量上传图片
查看>>
2012蓝桥杯【初赛试题】干支纪年
查看>>
关于重连测试的一点研究
查看>>
[NOI2014]购票
查看>>
推荐两个支持Java的云主机空间
查看>>
通过全备+binlog_server同步恢复被drop的库或表
查看>>
python3 ..../%E7%9B%B8%E5%86%8C/ 把乱码部分改为汉字。编码。
查看>>
Jquery 控件
查看>>
HTML5
查看>>
用JAVA 开发的DDOS攻击器
查看>>
SQL Server 用链接服务器 同步MySQL
查看>>
文件下载功能
查看>>
WPF自定义Window窗体样式
查看>>
20160623
查看>>
在ArcMap中将 DEM 显示为晕渲地貌效果
查看>>
POJ 2031 Building a Space Station【kruskal】
查看>>