FatMouse's Speed

Time Limit: 2000/1000 MS (Java/Others)   
Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 5546    Accepted Submission(s): 2393
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
题目链接:



解题心得:
1、这个题看似很复杂,其实只有几个环节处理好了之后就比较简单了。第一个环节是输入要求,是单组,但是是多组输入,输入到文件结束为止。处理完了输入要求之后是题目要求质量上升但是速度下降。可以按照质量升序排列一下,然后只剩下速度。然后找速度的最长下降子序列。最后还需要记录一下下降的子序列有哪些。
2、最长下降子序列和最长上升子序列一样的,详情看点击打开链接(n^2算法),点击打开链接(nlogn算法)。主要是记录子序列中的元素有哪些。可以直接开一个dp的结构体,结构体中放一个数组,每次状态转移的时候可以将数组中的元素一起转移然后加上当前状态就可以了。
3、这个问题告诉我们不要太过于死板了,状态转移,关于状态的定义不要过于死板了,只要可以跟着转移的都可以是状态,状态转移中可以有很多操作的。





#include<bits/stdc++.h>
using namespace std;
const int maxn = 1010;
struct mice
{
int w,s;
int pos;
} m[maxn]; struct Dp
{
int num[maxn];
int Num;
} dp[maxn];
bool cmp(mice a,mice b)
{
return a.w<b.w;
}
int main()
{
int t = 1;
int W,S;
while(scanf("%d%d",&W,&S) != EOF)//处理这个题输入的的办法
{
m[t].w = W;
m[t].s = S;
m[t].pos = t;
t++;
} /*
可以输入0 0结束看看自己的输入是否正确
while(scanf("%d%d",&W,&S) && W)//处理这个题输入的的办法
{
m[t].w = W;
m[t].s = S;
m[t].pos = t;
t++;
}
t--;
for(int i=1;i<=t;i++)
printf("%d %d\n",m[i].w,m[i].s); */ t--;//用来记录有多少个元素
int Max = 0;//记录最长的递减子序列
sort(m,m+t,cmp);//拍一下序,cmp函数自己写一下
for(int i=1;i<=t;i++)
{
dp[i].Num = 1;
dp[i].num[1] = m[i].pos;
}
for(int i=1; i<=t; i++)
{
for(int j=0; j<=i; j++)
{
if(m[j].s > m[i].s && m[j].w < m[i].w)
{
if(dp[j].Num+1 > dp[i].Num)//如果符合状态的转移要求
{
for(int k=1;k<=dp[j].Num;k++)//记录状态的数组一起跟着转移
{
dp[i].num[k] = dp[j].num[k];
dp[i].num[k+1] = m[i].pos;//当前状态也要放入
}
dp[i].Num = dp[j].Num + 1;
if(dp[i].Num > Max)
Max = dp[i].Num;
}
}
}
} bool flag = false;
printf("%d\n",Max);
for(int i=1;i<=t;i++)
{
if(dp[i].Num == Max)
{
flag = true;
for(int j=1;j<=dp[i].Num;j++)
{
if(dp[i].num[j]!=0)
printf("%d\n",dp[i].num[j]);
}
break;
}
}
return 0;
}


动态规划:HDU1160-FatMouse's Speed(记录动态规划状态转移过程)的更多相关文章

  1. HDU 1160 FatMouse's Speed (动态规划、最长下降子序列)

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. HDU1160 FatMouse's Speed —— DP

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1160 FatMouse's Speed Time Limit: 2000/1000 MS ...

  3. HDU1160:FatMouse's Speed(最长上升子序列,不错的题)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1160 学的东西还是不深入啊,明明会最长上升子序列,可是还是没有A出这题,反而做的一点思路没有,题意就不多说 ...

  4. [HDU1160]FatMouse's Speed

    题目大意:读入一些数(每行读入$w[i],s[i]$为一组数),要求找到一个最长的序列,使得符合$w[m[1]] < w[m[2]] < ... < w[m[n]]$且$s[m[1] ...

  5. 读懂TCP状态转移

    读懂TCP状态转移过程,对理解网络编程颇有帮助,本文将对TCP状态转移过程进行介绍,但各状态(总共11个)含义不在本文介绍的范围,请参考文末的书目列表. TCP状态转换图(state transiti ...

  6. hdu FatMouse's Speed 动态规划DP

    动态规划的解决方法是找到动态转移方程. 题目地址:http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=3&sectionid ...

  7. hdoj1160 FatMouse's Speed 动态规划

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. HDU 1160 FatMouse's Speed(要记录路径的二维LIS)

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. HDU 1160:FatMouse's Speed(LIS+记录路径)

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

随机推荐

  1. Windows下 bat调用TSql问题

    一.建立sql文件 在sql管理工具中写好sql文件,并保证能够正常运行,之后用unique编码保存. 二.建立一个bat文件osql -U登录用户 -P密码 -S服务器 <sql文件.sql ...

  2. SpringBoot | 第八章:统一异常、数据校验处理

    前言 在web应用中,请求处理时,出现异常是非常常见的.所以当应用出现各类异常时,进行异常的捕获或者二次处理(比如sql异常正常是不能外抛)是非常必要的,比如在开发对外api服务时,约定了响应的参数格 ...

  3. python之其他模块的用法

    1.时间模块   在Python中通常有三种表示时间的方式,分别是时间戳.元组.格式化的时间字符串. 时间模块的常用方法 time.sleep() #指定延迟时间 time.time() #当前时间的 ...

  4. It does not do to dwell on dreams and forget to live.

    It does not do to dwell on dreams and forget to live.不要过于依赖梦想,却忘了生活.

  5. C/C++ sort函数的用法

    sort函数的用法(#include<algorithm>) 做ACM题的时候,排序是一种经常要用到的操作.如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比 ...

  6. 百倍性能的PL/SQL优化案例(r11笔记第13天)

    我相信你是被百倍性能的字样吸引了,不过我所想侧重的是优化的思路,这个比优化技巧更重要,而结果嘛,其实我不希望说成是百倍提升,“”自黑“”一下. 有一个真实想法和大家讨论一下,就是一个SQL语句如果原本 ...

  7. hadoop上传文件失败报错(put: Cannot create file/eclipse.desktop._COPYING_. Name node is in safe mode.)

    解决办法: 离开安全模式方法:执行以下命令即可 bin/hadoop  dfsadmin -safemode leave 若不处理安全模式的话,web服务无法启动,dfsadmin report结果异 ...

  8. Pylint 是什么

    Pylint 是什么 Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅参考 ...

  9. 如果CDN服务器出了问题,怎么做不影响自己的网站

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3.jquery.min.js"></ ...

  10. codeforces 600A Extract Numbers

    模拟题,意思是一个字符串,单词直接用','或';'来分割,可以为空,把不含前导0的整数和其他单词分别放入A和B.按照一定格式输出. 没有用stl的习惯.维护两个下标i,j,表示开区间(i,j),两段补 ...