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. wordpress 获取站点的所有链接

    <?php include "wp-load.php"; $posts = new WP_Query('post_type=any&posts_per_page=-1 ...

  2. 01 Java 代码是怎么运行的

    Java代码运行的方式 1:在开发工具中运行 2:双击 jar 文件运行 3:在命令行中运行 4:在网页中运行 上述运行方式都离不开 JRE,也就是 Java 运行时环境.实际上 JRE 仅包含运行 ...

  3. 【Luogu】P2515软件安装(树形DP)

    题目链接 这么水的题我一遍没A,而且前两次提交都只有十分.气死我了.本来我的博客拒收水题来着. Tarjan缩点之后跑树形DP即可. #include<cstdio> #include&l ...

  4. bzoj 1061~1065【Noi2008】解题报告

    这次Noi好像格外喜欢树形DpQAQ P.S.好像这次的题都与图有关QAQ bzoj1061[Noi2008]志愿者招募:上下界可行最小费用流 bzoj1062[Noi2008]糖果雨:数形结合&am ...

  5. 【前端学习笔记】2015-09-02~~~~ 关于filter()匹配的使用

    关于filter的使用先记录以下几点: 1.filter(':even')遍历所有元素,找到index为偶数的元素.. ps: filter(':odd')       odd----奇数   eve ...

  6. storage存储对象和数组类型时候的问题

    storage类型存储的类型为字符串,直接使用localstorage.setItem方法存储进去,取出来的时候数据是不能够使用的 解决方法: 先使用JSON.stringify方法转换成为字符串,然 ...

  7. net3:DropDownList的动态绑定

    原文发布时间为:2008-07-29 -- 来源于本人的百度文章 [由搬家工具导入] using System.Data;using System.Configuration;using System ...

  8. StarUML 系列,静态图与动态图,用例图,类图【ps:熟悉一下starUML】

    大部分:   静态图部分,即静态不动的图 1.用例图, Use case diagram 1.展示系统核心功能及与其交互的用户ACTOR 表示:椭圆

  9. AC日记——小行星 洛谷 P2711

    题目背景 pid=3437 题目描述 星云中有n颗行星,每颗行星的位置是(x,y,z).每次可以消除一个面(即x,y或z坐标相等)的行星,但是由于时间有限,求消除这些行星的最少次数. 输入输出格式 输 ...

  10. IOS-<input>表单元素只能读,设置readonly时光标仍然可见的解决办

    在HTML中,如果把一个<input>的readonly属性设置为"readonly",表示这个表单元素不能编辑. 但是,鼠标点击之后,这个表单元素还是有光标存在的. ...