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.解答 ...
随机推荐
- lock to deteck in oracle
0,5,10 0-23 * * * /home/oracle/utility/blocker/detect_blocker.sh db 120 > /home/oracle/utility/tr ...
- jmeter(十五)Jmeter默认报告优化
一.本文目的: 之前写了两篇文章搭建持续集成接口测试平台(Jenkins+Ant+Jmeter)和ANT批量执行Jmeter脚本,功能实现上都没有什么问题,但是最后生成的报告有一点小问题,虽然不影响使 ...
- [转]Keyword Reference (F#)
Visual F# Development Portal http://msdn.microsoft.com/en-us/library/vstudio/ff730280.aspx 本文转自:http ...
- Spring数据访问2 - 通过JDBC访问数据库
因为原生的jdbc操作太复杂,几乎都是建立连接.关闭连接和处理例外等模板式的代码,Spring对此进行了抽象——使用模板来消除样板式代码 ,JdbcTemplate承担了简化数据库访问这块的任务. 利 ...
- poj3050 Hopscotch
思路: 水题. 实现: #include <iostream> #include <cstdio> #include <set> using namespace s ...
- QT入门学习2
QT获取窗口几何布局有2类函数: 1.包含框架:x().y().frameGemetry().pos().move()... 2.不包含框架:geometry().width().height().w ...
- InChatter系统之服务端的Windows服务寄宿方式(三)
为了部署的方便,我们开发Windows服务的服务寄宿程序,这样我们的服务便可以作为系统服务,随着系统的启动和关闭而启动和关闭,而避免了其他的设置,同时在服务的终止时(如系统关闭等)能及时处理服务的关闭 ...
- chosen-bootstrap使用技巧
1.页面加载完成后,通过js方式设置值,无法有效显示的问题. 解决:先设置值,让后在进行初始化操作. // 设置select选中值 $("#type").val(type); // ...
- RequireJS 上手使用
首先 点击此处 得到requirejs. 捣鼓了俩小时终于运行成功了,原因是因为require(['我是空格underscore',...],function(){...})的时候 变量多个空格(坑爹 ...
- 安卓 Android 简单数据库(增删改查)
<Button android:id="@+id/delete_btn" android:layout_width="wrap_content" andr ...