CSU 1225 最长上升子序列并记录其个数
for(int j=;j<i;j++){
if(h[i] > h[j]){
if(len[i] == len[j] + ) cnt[i]+=cnt[j];
if(len[i] < len[j] + ) len[i] = len[j] + , cnt[i] = cnt[j];
}
//身高相同的情况统计
/*else if(h[i] == h[j]){
if(len[i] == len[j]) cnt[i] += cnt[j];
if(len[i] < len[j]) len[i] = len[j] , cnt[i] = cnt[j];
}*/
}
这道题需要注意的一点是如果出现身高相同的情况,那么这两个人不管谁站在队列中只算一种情况:如上面的代码所示,如果相同也统计那么就会报错,但是样例因为没有相同高度所以可以过
len[i] 表示前i个对象能构建的最长的子序列长度
cnt[i] 表示前i个对象构建的最长子序列长度的个数
#include <cstdio>
#include <cstring>
using namespace std;
#define max(a,b) a>b?a:b
const int N = ;
int h[N] , len[N] , cnt[N];
int main()
{
freopen("test.in","rb",stdin);
int n;
while(scanf("%d",&n)!=EOF){
memset(len , ,sizeof(len));
memset(cnt , ,sizeof(cnt));
len[] = , cnt[] = ;
for(int i = ;i < n;i++)
{
len[i] = cnt[i] = ;
scanf("%d",h+i);
for(int j=;j<i;j++){
if(h[i] > h[j]){
if(len[i] == len[j] + ) cnt[i]+=cnt[j];
if(len[i] < len[j] + ) len[i] = len[j] + , cnt[i] = cnt[j];
}
/*else if(h[i] == h[j]){
if(len[i] == len[j]) cnt[i] += cnt[j];
if(len[i] < len[j]) len[i] = len[j] , cnt[i] = cnt[j];
}*/
}
}
int max_len = , cnt_all = ;
for(int i=;i<n;i++){
max_len = max(max_len , len[i]);
}
for(int i=;i<n;i++){
if(max_len == len[i])
cnt_all += cnt[i];
}
printf("%d %d\n",max_len,cnt_all);
}
return ;
}
CSU 1225 最长上升子序列并记录其个数的更多相关文章
- 【最长下降子序列的长度和个数】 poj 1952
转自http://blog.csdn.net/zhang360896270/article/details/6701589 这题要求最长下降子序列的长度和个数,我们可以增加数组maxlen[size] ...
- 【模拟】CSU 1807 最长上升子序列~ (2016湖南省第十二届大学生计算机程序设计竞赛)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1807 题目大意: 给你一个长度为N(N<=105)的数列,数列中的0可以被其他数 ...
- HDU - 1160 最长上升子序列以及记录路径
题意:第一列,给出老鼠的重量,第二列,给出老鼠的速度,要证明老鼠的重量越大,速度越小,给出最多老鼠的数量,并说明第几只. 思路:先将老鼠按照重量从大到小排序,然后速度是从小到大,求最长上升子序列,学习 ...
- CSU 1807: 最长上升子序列~ 分类讨论
1807: 最长上升子序列~ Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 138 Solved: 17[Submit][Status][Web Bo ...
- POJ - 2533 Longest Ordered Subsequence与HDU - 1257 最少拦截系统 DP+贪心(最长上升子序列及最少序列个数)(LIS)
Longest Ordered Subsequence A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let ...
- (最长上升子序列 并记录过程)FatMouse's Speed -- hdu -- 1160
http://acm.hdu.edu.cn/showproblem.php?pid=1160 FatMouse's Speed Time Limit: 2000/1000 MS (Java/Other ...
- [C++] 动态规划之矩阵连乘、最长公共子序列、最大子段和、最长单调递增子序列、0-1背包
一.动态规划的基本思想 动态规划算法通常用于求解具有某种最优性质的问题.在这类问题中,可能会有许多可行解.每一个解都对应于一个值,我们希望找到具有最优值的解. 将待求解问题分解成若干个子问题,先求解子 ...
- - > 动规讲解基础讲解七——最长单增子序列
(LIS Longest Increasing Subsequence)给定一个数列,从中删掉任意若干项剩余的序列叫做它的一个子序列,求它的最长的子序列,满足子序列中的元素是单调递增的. 例如给定序列 ...
- 求解最长递增子序列(LIS) | 动态规划(DP)+ 二分法
1.题目描述 给定数组arr,返回arr的最长递增子序列. 2.举例 arr={2,1,5,3,6,4,8,9,7},返回的最长递增子序列为{1,3,4,8,9}. 3.解答 ...
随机推荐
- 462 Minimum Moves to Equal Array Elements II 最少移动次数使数组元素相等 II
给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000.例如:输入:[1,2,3]输出:2说明:只有两个动作是必 ...
- 转】[MySQL优化]为MySQL数据文件ibdata1瘦身
原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/2/ 感谢! [MySQL优化]为MySQL数据文件ibda ...
- AJPFX实践 java实现快速排序算法
快速排序算法使用的分治法策略来把一个序列分为两个子序列来实现排序的思路: 1.从数列中挑出一个元素,称为“基准“2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面 ...
- mysql之流程控制
目录 分支结构 循环结构 分支结构: 1.if condition then [statement] elseif condition then [statement] else [statement ...
- MYSQL5.7 忘记ROOT密码/初始化ROOT密码
编辑my.cnf允许空密码登录 [root@7Core ~]# vi /etc/my.cnf #在[mysqld]下加入一行 skip-grant-tables=1 重新启动Mysql服务 [root ...
- Android学习笔记(六) Activity和View基础
一.Activity的启动流程 操作系统首先查看AndroidManifest.xml来决定启动哪一个Activity. 生成对应的Activity对象(系统自动完成). 调用它的onCreate() ...
- was--创建概要文件(典型)
1.第一步 2 .创建 3.创建 4 .典型 5 下一步 6 下一步 7.下一步 8.输入用户和密码,下一步 9.下一步 10.下一步 11.下一步 12.下一步 13.下一步 14.创建 ...
- JavaScript线程
JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 setTimeout( ...
- Record these plug-ins of vscode
实在无聊透顶.写个随笔记录一下vscode的插件好了. 第一次使用(之前一直在用sublime...),以后再更新吧.record my color too! Visual Studio Code B ...
- CFAN:Coarse-to-Fine Auto-Encoder Networks (CFAN) for Real-Time Face Alignment
作者:嫩芽33出处:http://www.cnblogs.com/nenya33/p/6801045.html 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者同意,必须保留此段声明:必须 ...