p的思路不一定要到最后去找到ans;也可以设置成在中间找到ans;比如J - FatMouse's Speed 这个题,如果要是让dp[n]成为最终答案的话,即到了i,最差的情况也是dp[i-1],就很难去保存路径,但是如果换一个思路,让dp[i]必须去参与,如果无法与前面的结合,那么就新开一个。

  最后路径是保存的逆序的,那么开一个stack就可以解决。

 //显然这个题是要维护两个变量的最长上升子序列
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <fstream>
#include <stack> using namespace std;
//ifstream fin("a.txt");
struct node{
int weight,speed,num;
}a[];
bool cmp(node a,node b)
{
if(a.weight==b.weight)
return a.speed>b.speed;
else return a.weight<b.weight;
}
struct Node{
int cnt,now,pre;
}dp[];
int pre[];
int main()
{
int x,y;int i=;
while(cin>>x>>y)
{
a[i].weight=x;a[i].speed=y,a[i].num=i;i++;
}
sort(a+,a+i,cmp);
dp[].cnt=;
for(int j=;j<=i-;j++)
{
dp[j].cnt=;
for(int k=j-;k>=;k--)
{
if(a[j].speed<a[k].speed&&a[j].weight>a[k].weight)
{
if(dp[j].cnt<dp[k].cnt+)
{
dp[j].cnt=dp[k].cnt+;
dp[j].pre=k;
dp[j].now=a[j].speed;
}
}
}
}
int ans=;
int m=i-;
for(int j=;j<=i-;j++)
{
if(ans<dp[j].cnt)
{
ans=dp[j].cnt;
m=j;
}
} cout <<ans<<endl; stack <int> s;
s.push(a[m].num);ans--;
while(ans--)
{
s.push(a[dp[m].pre].num);
m=dp[m].pre;
}
while(!s.empty())
{
cout << s.top()<<endl;
s.pop();
}
return ;
}

J - FatMouse's Speed的更多相关文章

  1. J - FatMouse's Speed dp

    题目链接: https://vjudge.net/contest/68966#problem/J 找最长子串并且记录路径. TLE代码: #include<iostream> #inclu ...

  2. FatMouse's Speed——J

    J. FatMouse's Speed FatMouse believes that the fatter a mouse is, the faster it runs. To disprove th ...

  3. FatMouse's Speed

    J - FatMouse's Speed DP的题写得多了慢慢也有了思路,虽然也还只是很简单的DP. 因为需要输出所有选择的老鼠,所以刚开始的时候想利用状态压缩来储存所选择的老鼠,后面才发现n太大1& ...

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

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

  5. HDU 1160 FatMouse's Speed (DP)

    FatMouse's Speed Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Su ...

  6. FatMouse's Speed(HDU LIS)

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

  7. FatMouse's Speed 基础DP

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

  8. zoj 1108 FatMouse's Speed 基础dp

    FatMouse's Speed Time Limit: 2 Seconds      Memory Limit:65536 KB     Special Judge FatMouse believe ...

  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. SpringBoot与Web开发

    web开发1).创建SpringBoot应用,选中我们需要的模块:2).SpringBoot已经默认将这些场景已经配置好了,只需要在配置文件中指定少量配置就可以运行起来3).自己编写业务代码: 自动配 ...

  2. js中如何通过身份证号计算出生日期和年龄

    在html中有如下标签 身份证号:<input type="text" id="Gra_IDCard" onChange="IDCardChan ...

  3. 字符串和数组----vector

    vector能容纳绝大多数类型的对象作为其元素,但是因为引用不是对象,所以不存在包含引用的vector. 使用vector需要包含头文件vector. 1.初始化vector对象的方法 1)vecto ...

  4. SQL优化过程中常见Oracle HINT

    在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量, ...

  5. mips编译器交叉编译openssl

    1.下载源码: git clone https://github.com/openssl/openssl.git 2. 配置生成Makefile ./config  no-asm shared --p ...

  6. python 定义class时的内置方法

    __contains__():对类实例使用in ,not in操作时调用 class A(object): def __init__(self,num): self.num=num def __con ...

  7. UUID+随机数

    import java.util.Random; import java.util.UUID; public class UUIDUtils { public static String getUUI ...

  8. SecureCRT使用(转)

      功能介绍 连接概述    1.当您启动SecureCRT时,您将看到“快速连接”对话框与主SecureCRT窗口一起出现.  2.有几种接口可用于连接远程机器:快速连接对话框,工具栏上的连接栏,会 ...

  9. capjoint中的tel3核心代码teleseis3.f90

    为了加入更多层的模型 将 teleseis3.f90 /home/capjoint-master/src/tel3/teleseis3.90的地层模型读取部分改为: program test PARA ...

  10. python 高级语言特性

    装饰器decorator的使用 在某公司的一次笔试中面试官出了一道题,使用python 的decorator实现一个函数的执行时间的计算. 分析:关于函数执行时间的计算,那么肯定是执行之前得到一个时间 ...