option=com_onlinejudge&Itemid=8&page=show_problem&problem=1072">链接:UVa 10131

题意:给定若干大象的体重及智商值。求满足大象体重严格递增,智商严格递减的序列的最大个数。

并打印随意一组取得最大值的序列的大象编号

分析:这个是LIS的应用,仅仅只是推断条件有两个,能够先对大象的体重排序,可是要打印路径。

那就必须得回溯求路径。能够直接逆序循环求,当然递归也是一个好的选择

#include<cstdio>
#include<algorithm>
using namespace std;
struct stu
{
int size,iq,id;
}a[1005];
int dp[1005],path[1005],m;
int cmp(struct stu a,struct stu b)
{
if(a.size!=b.size)
return a.size<b.size;
return a.iq>b.iq;
}
void back_path1(int i)
{
if(path[i]!=i)
back_path1(path[i]);
printf("%d\n",a[i].id);
}
void back_path2(int i)
{
if(m--){
back_path2(path[i]);
printf("%d\n",a[i].id);
}
}
int main()
{
int i=1,j,n,k,b[1005];
while(scanf("%d%d",&a[i].size,&a[i].iq)!=EOF){
a[i].id=i;
i++;
}
n=i-1;
sort(a+1,a+n+1,cmp);
for(i=1;i<=n;i++){
dp[i]=1;
path[i]=i;
for(j=1;j<i;j++)
if(a[j].size<a[i].size&&a[j].iq>a[i].iq&&dp[j]+1>dp[i]){
dp[i]=dp[j]+1;
path[i]=j;
}
}
k=1;
for(i=2;i<=n;i++)
if(dp[i]>dp[k])
k=i;
m=dp[k];
printf("%d\n",m);
b[1]=a[k].id;
i=2;
for(j=k;j>=1;j--) //直接逆序循环求路径
if(a[j].size<a[k].size&&a[j].iq>a[k].iq&&dp[k]==dp[j]+1){
b[i++]=a[j].id;
dp[k]--;
}
for(j=i-1;j>=1;j--)
printf("%d\n",b[j]);
//back_path1(k); //能够用两种递归求路径
//back_path2(k);
return 0;
}

Uva 10131 Is Bigger Smarter? (LIS,打印路径)的更多相关文章

  1. uva 10131 Is Bigger Smarter?(DAG最长路)

    题目连接:10131 - Is Bigger Smarter? 题目大意:给出n只大象的属性, 包括重量w, 智商s, 现在要求找到一个连续的序列, 要求每只大象的重量比前一只的大, 智商却要小, 输 ...

  2. UVA 10131 - Is Bigger Smarter? (动态规划)

    Is Bigger Smarter? The Problem Some people think that the bigger an elephant is, the smarter it is. ...

  3. UVA 10131 Is Bigger Smarter?(DP最长上升子序列)

    Description   Question 1: Is Bigger Smarter? The Problem Some people think that the bigger an elepha ...

  4. uva 10131 Is Bigger Smarter ? (简单dp 最长上升子序列变形 路径输出)

    题目链接 题意:有好多行,每行两个数字,代表大象的体重和智商,求大象体重越来越大,智商越来越低的最长序列,并输出. 思路:先排一下序,再按照最长上升子序列计算就行. 还有注意输入, 刚开始我是这样输入 ...

  5. UVA 10131 Is Bigger Smarter?(DP)

    Some people think that the bigger an elephant is, the smarter it is. To disprove this, you want to t ...

  6. UVa 10131: Is Bigger Smarter?

    动态规划题.类似UVa103 Stacking Box,都是题目给一种判断嵌套的方法然后求最长序列.提前对数据排序可以节省一些时间开销. 我的解题代码如下: #include <iostream ...

  7. What Goes Up UVA - 481 LIS+打印路径 【模板】

    打印严格上升子序列: #include<iostream> #include<cstdio> #include<algorithm> #include<cst ...

  8. UVa 103 - Stacking Boxes (LIS,打印路径)

    链接:UVa 103 题意:给n维图形,它们的边长是{d1,d2,d3...dn},  对于两个n维图形,求满足当中一个的全部边长 依照随意顺序都一一相应小于还有一个的边长,这种最长序列的个数,而且打 ...

  9. UVA - 10131Is Bigger Smarter?(DAG上的DP)

    题目:UVA - 10131Is Bigger Smarter? (DAG) 题目大意:给出一群大象的体重和IQ.要求挑选最多的大象,组成一个序列.严格的体重递增,IQ递减的序列.输出最多的大象数目和 ...

随机推荐

  1. 基于CefGlue的桌面应用开发

    原文地址:http://johnnyfee.github.io/csharp/2013/12/21/cef-glue/ 前言 如果你想使用WEB技术来开发桌面客户端,并且是想使用的语言也是C#时,那请 ...

  2. poj3126(bfs)

    题目链接:http://poj.org/problem?id=3126 题意:给两个四位数n,m,将n变成m需要多少步,要求每次只能改变n的某一位数,即改变后的数与改变前的数只有一位不同,且每次改变后 ...

  3. AOP 之 6.1 AOP基础 ——跟我学spring3(转)

    http://jinnianshilongnian.iteye.com/blog/1418596

  4. Python-方法重载的问题

    定义一个父类,在写一个子类继承他,重载他的foo方法: class Father: def foo(self): print"I am father" class Son(Fath ...

  5. java总结,错误集

    java中abstract怎么使用 abstract(抽象)修饰符,可以修饰类和方法 1,abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就 ...

  6. 用标准Struts2+mvc写的用户管理

    这星期的实验,最终调好了. 一句话,麻雀虽小,五脏俱全.相信刚学struts2的同学能够通过该实验能够更好地理解struts的结构和mvc 登录的之前写过,这里直接进入用户管理 用struts2都要在 ...

  7. struts(二)——struts框架实现的基本原理

    上一篇文章,我们介绍了MVC框架的基本原理,并指出了这个基本框架中存在大量if…else的问题.今天我们来介绍一下struts框架,让struts解决这个问题. 首先,看一下粗略的时序图: Actio ...

  8. 【JavaEE基础】在Java中如何使用jdbc连接Sql2008数据库

    我们在javaEE的开发中,肯定是要用到数据库的,那么在javaEE的开发中,是如何使用代码实现和SQL2008的连接的呢?在这一篇文章中,我将讲解如何最简单的使用jdbc进行SQL2008的数据库的 ...

  9. Linux訪问受限,訪问Linux总是Forbidden

    很多其它具体文档:http://download.csdn.net/download/zml_2015/8843061 有些人在依照要求一模一样照做之后,加上了全部的权限.可还是无法訪问,仍然是各种f ...

  10. 一个测试SQL2005数据库连接JSP档

    在这里,在SQL 2005中间InterLib数据库案例.得到InterLib/tb_booktype目录. 的影响,如下面的: watermark/2/text/aHR0cDovL2Jsb2cuY3 ...