转自http://blog.csdn.net/zhang360896270/article/details/6701589

这题要求最长下降子序列的长度和个数,我们可以增加数组maxlen[size](记录当前第1个点到第i个点之间的最长下降序列长度)和maxnum[size](记录1~i之间的最长下降序列个数 ),首先对于最长下降序列属于DP基础题,只要对每一个a[i]求出符合要求(a[i] < a[j])的max( maxlen[j] + 1)即可,主要难点在第二步求下降序列总数

在序列中,如果maxlen[j]+1 == maxlen[i]则说明a[i]和a[j]在同一个下降数列中,那么我们只要将每一种符合要求的状态maxnum[j]转移到maxnum[i]中就可以了,有几个细节需要注意,题目要求序列是严格递减的,那么对于两个相同的数我们只能记录一个合法解,那么程序必须只记录两个相同数之间的状态,在这里用倒推可以简化编程,只要找到一个等于的就直接跳出循环,还要注意,如果从当前的a[i]一直找到相等的a[j]在这之间都没有可行状态的话,当maxnum[i]默认值为1要修改为0(避免错误计算),为0的当然无需处理。

#include <iostream>
#include <string.h>
#include <cstdio>
using namespace std;
const int size = ;
int maxlen[size];//记录当前第1个点到第i个点之间的最长下降序列长度
int maxnum[size];//记录1~i之间的最长下降序列个数
int main()
{
//freopen("in.txt","r",stdin);
int a[size];
int n;
while (scanf("%d", &n) != EOF){
for (int i = ; i <= n; i ++){
scanf("%d", &a[i]);
maxnum[i] = ;
maxlen[i] = ;
}
for (int i = ; i <= n; i ++){
for (int j = ; j < i; j ++){
if (a[i] < a[j]){
maxlen[i] = max(maxlen[i], maxlen[j]+);
}
}
}
for (int i = ; i <= n; i ++)
if (maxlen[i] == )maxnum[i] = ;
for (int i = ; i <= n; i ++){
for (int j = i-; j > ; j --){
if (a[j] > a[i]){
if (maxlen[j]+ == maxlen[i]){
maxnum[i] += maxnum[j];
}
}
if (a[j] == a[i]){
if (maxlen[i] == )maxnum[i] = ;//如果搜索到一个相同的数后仍没有找到符合要求的序列,则为了避免重复赋值为0
break;
}
}
}
int maxx = -;
for (int i = ; i <= n; i ++){
if (maxlen[i] > maxx) maxx = maxlen[i];
}
int ans = ;
for (int i = ; i <= n; i ++){
if (maxlen[i] == maxx) ans += maxnum[i] ;
}
printf("%d %d\n", maxx, ans);
}
return ;
}

【最长下降子序列的长度和个数】 poj 1952的更多相关文章

  1. BUY LOW, BUY LOWER_最长下降子序列

    Description The advice to "buy low" is half the formula to success in the bovine stock mar ...

  2. 2020牛客寒假算法基础集训营6 C 汉诺塔 (dp 最长下降子序列)

    https://ac.nowcoder.com/acm/contest/3007/C 将木板按照Xi从小到大排序,将这时的Yi数列记为Zi数列,则问题变成将Zi划分为尽可能少的若干组上升子序列. 根据 ...

  3. HDU - 6197 array array array (最长上升子序列&最长下降子序列)

    题意:对于一个序列,要求去掉正好K个数字,若能使其成为不上升子序列或不下降子序列,则“A is a magic array.”,否则"A is not a magic array.\n&qu ...

  4. HDU-1257 最少拦截系统 贪心/DP 最长上升子序列的长度==最长不上升子序列的个数?

    题目链接:https://cn.vjudge.net/problem/HDU-1257 题意 中文题咯中文题咯 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然 ...

  5. 最长上升子序列(LIS)长度及其数量

    例题51Nod-1376,一个经典问题,给出一个序列问该序列的LIS以及LIS的数量. 这里我学习了两种解法,思路和代码都是参考这两位大佬的: https://www.cnblogs.com/reve ...

  6. 低价购买 (动态规划,变种最长下降子序列(LIS))

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  7. 最长下降子序列O(n^2)及O(n*log(n))解法

    求最长下降子序列和LIS基本思路是完全一样的,都是很经典的DP题目. 问题大都类似于 有一个序列 a1,a2,a3...ak..an,求其最长下降子序列(或者求其最长不下降子序列)的长度. 以最长下降 ...

  8. HDU 5748 最长上升子序列的长度nlogn(固定尾部)

    Bellovin Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  9. ZOJ1025-最长下降子序列

    ZOJ1025-Wooden Sticks 加工木棒问题 [问题描述] 现有n根木棒,已知它们的长度和重量.要用一部木工机一根一根地加工这些木棒.该机器在加工过程中需要一定的准备时间用于清洗机器.调整 ...

随机推荐

  1. 数据库中,char 与 varchar2 的区别

    区别1: char 是定长的字符串 varchar2 是变长的字符串 区别2: name char(10)   zhangsan__ 如果实际长度不足10,使用空格补齐   name varchar2 ...

  2. php基础(二)数组

    本文主要内容来自w3cschool 在 PHP 中,有三种数组类型: 索引数组 - 带有数字索引的数组 关联数组 - 带有指定键的数组 多维数组 - 包含一个或多个数组的数组 PHP 索引数组 有两种 ...

  3. Struts国际化

    第一步需要建立配置文件 格式为      文件名_zh_CN.properties    为中文配置文件   文件名_en_US.properties为美式英语配置文件 配置文件里面的值以键值对的形式 ...

  4. ubuntu 14.04 32位库

    如果是ubuntu 14.04,则请先执行: 方法1: sudo gedit /etc/apt/sources.list 然后在最后添加上: deb http://archive.ubuntu.com ...

  5. 面试中有关C++的若干问题

    面试中有关C++的若干问题 By 晴天, 2014.5.16晚 什么是多态?简要说一下C++中的多态的概念. (1)定义:多态是指相同对象收到不同消息或者不同对象收到相同消息产生不同的行为. (2)C ...

  6. jxls导出EXCEL模板

    http://jxls.sourceforge.net/ InputStream templateInput = null; InputStream in = null; OutputStream o ...

  7. CreateCompatibleBitmap 需要注意的问题

    不要使用CreateCompatibleDC得到的内存DC作为其参数,应使用真实DC,否则图片不能显示

  8. orderby与groupby区别

    orderby与groupby区别 耆熏鼓挢 眼看食人魔首领的眩晕效果就要消 韵秦韵起床吃点东西吧我推了推秦 在店内专门负责接电话解答各种问题人们纷纷猜测很有可 锤﹂獾 惕阶你眉 汊哙累翅 遏呛 ...

  9. php 分页类(2)

    <?phpinclude("connection.php");$perNumber=10; //每页显示的记录数$page=$_GET['page']; //获得当前的页面值 ...

  10. Strusts2--课程笔记4

    类型转换器: Struts2默认情况下可以将表单中输入的文本数据转换为相应的基本数据类型.这个功能的实现,主要是由于Struts2内置了类型转换器.这些转换器在struts-default.xml中可 ...