题目链接: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. ZK安装、ZK配置、ZK集群部署踩过的大坑

    天天采坑.来来咱们一起来填zookeeper的坑呀!! 解决坑一定要注意zk根目录下的神器,那就是logs目录下的日志, 第一坑:错误: 找不到或无法加载主类 org.apache.zookeeper ...

  2. 【java基础】01 计算机基础知识

    一.计算机基础知识 1. 计算机 1. 什么是计算机? 计算机在生活中的应用举例 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设 ...

  3. 命令替换、权限、chmod、特殊权限

    命令替换 把字符串里面的命令先执行再把该字符串输出,与PHP的""里面的变量被执行一样. $(COMMAND) `COMMAND` [root@jiakang ~]# echo & ...

  4. 负载均衡服务之HAProxy https配置、四层负载均衡以及访问控制

    前文我们聊了下haproxy的访问控制ACL的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12817773.html:今天我们来聊一聊haproxy的h ...

  5. CentOS7.x上轻量级TCP转发工具rinetd的安装配置

    一.实验背景 Linux下端口转发一般都使用iptables来实现,使用iptables可以很容易将TCP和UDP端口从防火墙转发到内部主机上. 如果需要将流量从专用地址转发到不在您当前网络上的机器上 ...

  6. 2019 ICPC 银川网络赛 H. Fight Against Monsters

    It is my great honour to introduce myself to you here. My name is Aloysius Benjy Cobweb Dartagnan Eg ...

  7. Python爬虫---爬取抖音短视频

    目录 前言 抖音爬虫制作 选定网页 分析网页 提取id构造网址 拼接数据包链接 获取视频地址 下载视频 全部代码 实现结果 待解决的问题 前言 最近一直想要写一个抖音爬虫来批量下载抖音的短视频,但是经 ...

  8. D. Caesar's Legions

    \(状态很容易设计\) \(设dp[i][j][u][v]表示放了i个1兵种和j个2兵种\) \(然后u不会0说明末尾放了连续u个1兵种,v不为0说明末尾放了连续v个2兵种\) #include &l ...

  9. E - Help Jimmy POJ - 1661 dp

    E - Help Jimmy POJ - 1661 这个题目本身不是很难,但是可以更加优化这个写法. 开始是n*n #include <cstdio> #include <cstri ...

  10. vue.prototype和vue.use的区别和注意点

    1.vue.prototype:实例上挂载属性/方法,例如Vue.prototype.axios = axios; 2.vue.use:引入插件,例如vuex,vue.use(vuex)如图,vue. ...