题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160

题目大意:给出多个数据组(最多1000个),terminated by end of file,对于第 i 个数据组有两个数据:W[i] 和 S[i],要求找出一串数据组,在这串数据组中,W[i] 递增,对应的 S[I] 递减,要求数据串尽可能长。

解题思路:

  DP。用数组dp[i] 表示以第 i 组数据为结尾的最长长度。

  由于有每组有两个数据,我们可以一上来先对其中一种数据进行排序。我选择先把 W[i] 按从小到大排序,对于W[i] 相同的数据组,我们从大到小排序。这样一来,我们便可以少考虑一种数据,W[i] 已经能够保证合法,只要不是相等的情况。在外层循环中从头枚举各个数据组 i,计算dp[i] ,在内层循环中枚举第1至 i-1 组数据组 j,dp[i] = max( dp[j] + 1),当然,第 i 个数据组要满足W[i] < W[j] && S[i] > S[j]。

  用 pre[] 数组记录路径。

AC代码:

 #include <vector>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=+,inf=0x7ffffff;
struct node{
int W,S,ind;
}n[maxn];
int W[maxn],S[maxn],dp[maxn],pre[maxn],path[maxn];
bool cmp(const node &a,const node &b){
if(a.W<b.W) return ;
else if(a.W==b.W&&a.S>b.S) return ;
return ;
}
int main()
{
int num=;
while(scanf("%d%d",&n[num].W,&n[num].S)==){
pre[num]=;
n[num].ind=num;
dp[num]=;
num++;
}
sort(n+,n+num,cmp);
int ans=,aj;
for(int i=;i<num;i++){
for(int j=;j<i;j++){ //因为有了前面的排序,j必须小于i,不然之后的j不合法
if(n[j].W<n[i].W&&n[j].S>n[i].S&&dp[i]<dp[j]+){
dp[i]=dp[j]+;
pre[i]=j;
if(dp[i]>ans){
aj=i;
ans=dp[i];
}
}
}
} int t=,ti=aj;
while(ti!=){
path[t++]=ti;
ti=pre[ti];
}
printf("%d\n",ans);
while(t>){
t--;
printf("%d\n",n[path[t]].ind);
}
return ;
}

HDU1160的更多相关文章

  1. hdu1160 dp

    hdu1160 题意:给出很多老鼠的数据,分别是它们的体重和跑速,为了证明老鼠越重跑得越慢,要找一组数据,由若干个老鼠组成,保证老鼠的体重依次增加而跑速依次减小,问这组数据最多能有多少老鼠,并按体重从 ...

  2. hdu1160 LIS变形

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1160 题意:两个子序列 一个是升序,一个是降序,求最长的子序列是多长,并输出路径.(答案不 ...

  3. hdu1160(最长上升子序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160 题意:给定一些小猫的属性:体重和速度.然后求某些猫顺序的排列,使得体重上升,速度下降,这样的排列 ...

  4. HDU1160(LIS)

    主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160 题意:求体重下降.速度添加的样例最多有多少个 依据体重降序排一下,然后求速度的最长上升子序列 , ...

  5. HDU-1160.FatMouse'sSpeed.(LIS变形 + 路径打印)

    本题大意:给定一定数量的数对,每个数保存着一只老鼠的质量和速度,让你求出一个最长序列,这个序列按照质量严格递增,速度严格递减排列,让你输出这个序列的最长长度,并且输出组成这个最长长度的序列的对应的老鼠 ...

  6. HDU1160(KB12-J DP)

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

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

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

  8. dp求顺序hdu1160

    题意是仅仅求一次的顺序.先依照速度从大到小排序,速度想等到按体重增序排列. 然后基本就变成了求已定顺序序列的最长递增序列递增,跟那个求一致最大序列和的基本一致. dp[i]里存储的是到当前i最大的递增 ...

  9. hdu1160简单dp最长下降子序列

    /* 简单dp,要记录顺序 解:先排序,然后是一个最长下降子序列 ,中间需记录顺序 dp[i]=Max(dp[i],dp[j]+1); */ #include<stdio.h> #incl ...

  10. HDU1160 FatMouse's Speed —— DP

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

随机推荐

  1. 15个 MySQL 基础面试题,DBA 们准备好了吗?

    此前我们已经有发表过Linux 面试基础问答之一.二和三共3篇文章,获得读者的好评,同时我们得到反馈,有些读者希望这种交互式学习方法能够做得更加灵活.心动不如行动,我们这就为您奉上 15个 MySQL ...

  2. 配置secondarynamenode主机名masters

    1.配置hadoop的secondarynamenode,配置内容如下 node2 本文转自 素颜猪 51CTO博客,原文链接:http://blog.51cto.com/suyanzhu/19592 ...

  3. Function-time()

    time()函数返回自1970年1月1日0点以来经过的秒数,每秒变化一次? time()函数定义在头文件<time.h>中,原型是: time_t time(time_t *arg); 如 ...

  4. 图论--SCC强连通缩点--Tarjan

    强连通缩点与双连通缩点大同小异,也就是说将强连通分支缩成一个点之后,没有强连通,成为有向无环图,在对图进行题目的操作. // Tarjan算法求有向图强连通分量并缩点 #include<iost ...

  5. 2019 ICPC 南京网络赛 H-Holy Grail

    As the current heir of a wizarding family with a long history,unfortunately, you find yourself force ...

  6. HDU-1857 畅通工程再续

    畅通工程再续 Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定 ...

  7. ASP.NET Core3.x 基础—注册服务(2)

    这篇文章介绍在ASP.NET Core中注册一下自己的服务. 首先创建一个Services文件夹.在文件夹里面创建一个接口 IClock,以及两个类ChinaClock.UtcClock.这两个类分别 ...

  8. 绕WAF文章收集

    在看了bypassword的<在HTTP协议层面绕过WAF>之后,想起了之前做过的一些研究,所以写个简单的短文来补充一下文章里“分块传输”部分没提到的两个技巧. 技巧1 使用注释扰乱分块数 ...

  9. thinkphp 5.x~3.x 文件包含漏洞分析

    漏洞描述: ThinkPHP在加载模版解析变量时存在变量覆盖的问题,且没有对 $cacheFile 进行相应的消毒处理,导致模板文件的路径可以被覆盖,从而导致任意文件包含漏洞的发生. 主要还是变量覆盖 ...

  10. Halloween Costumes 玄学题

    传送门 太难了,完全不懂 设\(dp[i][j]\)为第i天到第j天的最少代价 \(dp[i][j]=dp[i][j-1]+1\)(第j天多穿一件衣服) \(dp[i][j]=min(dp[i][j] ...