FatMouse's Speed

pid=1160">http://acm.hdu.edu.cn/showproblem.php?pid=1160

最长递增子序列问题的一个变体。实际上跟最长递增子序列问题没有不论什么本质的差别。

定义一个结构体mice,设mice[i].w表示第i仅仅老鼠的重量,mice[i].s表示第i仅仅老鼠的速度。对mice结构体进行排序。以w为第一keyword,递增。s为第二keyword,递减。设dp[i]表示以mice[i]为结尾的最长序列的长度。考虑某一个dp[i]。则有:

dp[i] = max(dp[i], dp[j]+1) (1<=j<i,且mice[i].w>mice[j].w。mice[i].s < mice[j].s)

当中,初始条件为dp[i]=1 (i=1, 2, ..., n)

排序的过程中须要加一个变量记录其原始的位置,由于终于的输出是原始的排序。

贴上AC代码:

#include<iostream>
#include<algorithm>
using namespace std;
struct mouse
{
int w;
int s;
int index;
};
mouse mice[1005];
int dp[1005];//dp[i]表示以mice[i]为结尾的最长递增子序列
int pre[1005];//pre[i]记录i的上一个数据
int res[1005];//存放终于的结果
bool cmp(mouse a,mouse b)
{
if(a.w!=b.w)
return a.w<b.w;
return a.s>b.s;
} int main()
{
freopen("1160.in","r",stdin);
freopen("1160.out","w",stdout);
int i=1,j;
while(cin>>mice[i].w>>mice[i].s)
{
dp[i]=1;
pre[i]=0;
mice[i].index=i;
i++;
}
int n=i-1;
sort(mice+1,mice+1+n,cmp);
int maxlen=0;//最长序列长度
int end;//最长序列的末尾下标
dp[1]=1;
for(i=1;i<=n;i++)
{
for(j=1;j<i;j++)
{
if(mice[i].w>mice[j].w&&mice[i].s<mice[j].s&&dp[j]+1>dp[i])
{
dp[i]=dp[j]+1;
pre[i]=j;
if(dp[i]>maxlen)
{
end=i;
maxlen=dp[i];
}
}
}
}
int t=end;
i=0;
while(t!=0)
{
res[i++]=t;
t=pre[t];
}
cout<<i<<endl;//i指向总数
while(i>0)
{
i--;
cout<<mice[res[i]].index<<endl;
}
return 0;
}

HDOJ1160 Fat Mouse&#39;s Speed的更多相关文章

  1. HDU 1160 FatMouse&#39;s Speed(DP)

    题意  输入n个老鼠的体重和速度   从里面找出最长的序列  是的重量递增时速度递减 简单的DP  令d[i]表示以第i个老鼠为所求序列最后一个时序列的长度  对与每一个老鼠i  遍历全部老鼠j  当 ...

  2. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

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

  3. HDU 1160 FatMouse&#39;s Speed (最长有序的上升子序列)

    题意:给你一系列个w,s.要你找到最长的n使得 W[m[1]] < W[m[2]] < ... < W[m[n]] and S[m[1]] > S[m[2]] > ... ...

  4. HDU 1160 FatMouse&#39;s Speed DP题解

    本题就先排序老鼠的重量,然后查找老鼠的速度的最长递增子序列,只是由于须要按原来的标号输出,故此须要使用struct把三个信息打包起来. 查找最长递增子序列使用动态规划法.主要的一维动态规划法了. 记录 ...

  5. HD1160FatMouse's Speed(最长单调递增子序列)

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

  6. ACM Greedy Mouse

    Greedy Mouse 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 A fat mouse prepared M pounds of cat food,read ...

  7. 一位学长的ACM总结(感触颇深)

    发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ...

  8. JS----贪吃蛇游戏

    在网上找到的几种例子 <!DOCTYPE html> <html > <head> <meta http-equiv="Content-Type&q ...

  9. Selenium如何支持测试Windows application

    很长一段时间大家都支持Selenium是只支持测试Web应用程序的. 纵观Selenium的成长历程,不难解释这个原因.Selenium开始的时候是作为一个Firefox中的插件出现的,而且做得是纯J ...

随机推荐

  1. concurrent.futures模块(进程池&线程池)

    1.线程池的概念 由于python中的GIL导致每个进程一次只能运行一个线程,在I/O密集型的操作中可以开启多线程,但是在使用多线程处理任务时候,不是线程越多越好,因为在线程切换的时候,需要切换上下文 ...

  2. TensorFlow——小练习:feed

    feed就是喂入数据 使用feed前必须要有占位符作为操作的对象,在运行操作的时候喂入数据. # _*_coding:utf-8_*_ import tensorflow as tf import n ...

  3. [git 学习篇]工作区和暂存区

    1 工作区,就是目录/User/my./learngit 2 版本库 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. liuzhipeng@exdroid43:~/pad/pad- ...

  4. [uiautomator篇][python调用java][1]应用下载的插件需要很长时间问题解决

    1第一次打开应用,可能会要求下载插件,我们先在/sdcard/Android/data/<packageName>  或者/data/data/<pakeageName>找到插 ...

  5. 股票交易(DP+单调队列优化)

    题目描述 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价为每股APi, ...

  6. AtCoder Regular Contest 091

    数学场,做到怀疑人生系列 C - Flip,Flip, and Flip...... Time limit : 2sec / Memory limit : 256MB Score : 300 poin ...

  7. js版本下拉菜单

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. activemq的安装启动

    Activemq安装和启动   官网:http://activemq.apache.org/   安装启动: $ tar -zxvf apache-activemq-5.11.1-bin.tar.gz ...

  9. 【bzoj1592】[Usaco2008 Feb]Making the Grade 路面修整

    FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中. 整条路被分成了N段,N个整数A_1, ...

  10. 【BZOJ1036】树的统计Count(树链剖分,LCT)

    题意:一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: ...