HLG1116-选美大赛
2024-08-30 21:51:06
Description |
一年一度的哈理工选美大赛开始了.来自各个院系的N个美女们都在一起排成一排,然后从左到右给他们标号(1-N),评委叫兽开始观摩,由于身高高低都不同, 叫兽想从中选出尽可能多的人使得他们的身高从左到右依次递增,你能帮助叫兽吗? |
Input |
输入数据第一行一个数据表示美女的个数N(0<N<100) 接下来有N个数据表示1-N标号的美女的身高,身高范围都在0-180之内 当N=0时候输入结束 |
Output |
按照样例输出,首先The number is N:N是选出最多美女个数,然后后面输出N个数,代表选出美女的标号,从左到右依次输出. 题目保证答案唯一 |
Sample Input |
3 2 1 2 3 1 2 3 0 |
Sample Output |
The number is 2: 2 3 The number is 3: 1 2 3 |
想说,这道题目,求LIS不是问题,纠结在于记录路径,搞这个搞了半天,结果还是去看了大牛的博客T T,只能说,学习了。。。
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <stack> using namespace std;
const int MAX_SIZE = ;
int dp[MAX_SIZE];
int vis[MAX_SIZE];
int strat; int LIS(int arr[], int n)
{
memset(vis, , sizeof(vis));
for(int i = ; i <= n; ++i)
{
dp[i] = ;
} int ans = ;
dp[] = ; for(int i = ; i <= n; ++i)
{
ans = dp[i];
for(int j = ; j < i; ++j)
{
if(arr[i] > arr[j] && dp[j] > ans)
{
ans = dp[j];
vis[i] = j;
}
}
dp[i] = ans + ;
}
ans = ;
for(int i = ; i <= n; ++i)
{
if(dp[i] > ans)
{
ans = dp[i];
strat = i;
}
} return ans;
} ///dfs去找路径
void path(int strat)
{
if(strat != )
{
path(vis[strat]);
printf(" %d", strat);
}
} int main()
{
int n;
int arr[MAX_SIZE];
stack<int > s; while(~scanf("%d", &n) && n)
{
for(int i = ; i <= n; ++i)
{
scanf("%d", arr + i);
}
int ans = LIS(arr, n);
printf("The number is %d:",ans); path(strat);
puts("");
}
return ;
}
最新文章
- MVP ComCamp &; GCR MVP Openday 2014
- android下面使用SurfaceView+ mediaPlayer播放视频
- CATransition-转场动画
- 解析客户端IP
- 【洛谷P1969】积木大赛
- CentOS6.5_Nginx1.40_Php5.57_MySQL5.5.35编译安装全记录
- 认识变量------JAVA
- 【python自动化第十一篇】
- 转:misc_register、 register_chrdev 的区别总结
- Java中抽象类和接口区别
- 从零开始打jar包
- 利用光场进行深度图估计(Depth Estimation)算法之一——聚焦算法
- Mesos源码分析(11): Mesos-Master接收到launchTasks消息
- Java文件类型工具类
- 【JAVA集合框架一 】java集合框架官方介绍 Collections Framework Overview 集合框架总览 翻译 javase8 集合官方文档中文版
- 理解根目录,classpath, getClass().getResourceAsStream和getClass().getClassLoader().getResourceAsStream的区别
- Testlink解决大用例导入问题
- springboot项目线程使用2
- 51nod 1413 权势二进制
- nginx反向代理解决wechat图片问题