`
暴风雪
  • 浏览: 389106 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[DP]poj 1952:BUY LOW, BUY LOWER

阅读更多

大致题意:

    给出一列由n个数字组成的数,求出最长递减子序列的长度,并求出共有多少种最长递减子序列。

 

大致思路:
    第一问很简单,第二问实在看不出来了,查的题解,囧啊,大家不要bs我~~大致过程就是在第一个求最长递增子序列的基础上,对于当前元素是否能够接在其他递减子序列后面再做讨论。要注意两个子序列完全相同的情况,在这里完全相同的子序列只能算一个。

 

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int nMax=10000;
int num[nMax];
int dp[nMax];
int tim[nMax];
int main(){
    int n,i,j,k;
    while(scanf("%d",&n)!=EOF){
        for(i=1;i<=n;i++){
            scanf("%d",&num[i]);
        }
        for(i=1;i<=n;i++){
            dp[i]=1;
            tim[i]=1;
        }
        for(i=1;i<=n;i++){
            for(j=i-1;j>=1;j--){
                if(num[j]>num[i]){
                    if(dp[j]+1>dp[i]){
                        dp[i]=dp[j]+1;
                        tim[i]=tim[j];
                    }
                    else{
                        if(dp[j]+1==dp[i]){
                            tim[i]+=tim[j];
                        }
                    }
                }
                else{
                    if(num[i]==num[j]){
                        if(dp[i]==1){
                            tim[i]=0;
                        }
                        break;
                    }
                }
            }
        }
        int ans1=-1,ans2=0;
        for(i=1;i<=n;i++){
            if(dp[i]>ans1){
                ans1=dp[i];
            }
        }
        for(i=1;i<=n;i++){
            if(dp[i]==ans1){
                ans2+=tim[i];
            }
        }
        cout<<ans1<<" "<<ans2<<endl;
    }
    return 0;
}
0
0
分享到:
评论

相关推荐

    经典 的POJ 分类

    - POJ 1860、POJ 3259:利用Dijkstra算法解决最短路径问题。 - POJ 1062、POJ 2253:涉及Bellman-Ford算法的应用场景。 - POJ 1125、POJ 2240:Floyd算法的典型实例。 ##### 最小生成树 - **算法**: - Prim...

    acm新手训练方案新手必备

    - POJ 1753: 排序相关问题 - POJ 2965: 排序应用实例 - **搜索**:包括深度优先搜索(DFS)、广度优先搜索(BFS)等。 - **示例题目**: - POJ 1328: DFS的应用 - POJ 2109: BFS的应用 - POJ 2586: 搜索技巧展示 -...

    POJ2092:计数排序,求第K大的元素

    【标题】"POJ2092:计数排序,求第K大的元素"是一个编程题目,主要涉及计数排序算法以及如何在数组中找出第K大的元素。计数排序是一种非基于比较的排序算法,它适用于整数排序,尤其在数据范围不大的情况下效率极高。...

    ACM北大训练

    - poj3267: 涉及到DP模型问题,适合用动态规划解决。 #### 六、数学 ##### 1. 组合数学 - **定义**: 组合数学是研究有限集合的不同计数组合方式的一门学科。 - **应用场景**: 在概率统计、计算机科学等领域广泛...

    poj dp总结,动态规划分类

    ### poj dp总结:动态规划分类 #### 概述 动态规划(Dynamic Programming,简称DP)是一种在计算机科学和数学中广泛使用的算法策略,用于解决最优化问题。它通过将复杂问题分解为较简单的子问题来求解,并利用这些...

    acm训练计划(poj的题)

    - (poj1860, poj3259, poj1062, poj2253, poj1125, poj2240):介绍迪杰斯特拉算法(Dijkstra)、贝尔曼-福特算法(Bellman-Ford)、弗洛伊德算法(Floyd)等。 - 使用堆优化的迪杰斯特拉算法。 3. **最小生成树...

    POJ1-7试题

    这是西北工业大学的POJ试题的答案,欢迎下载!

    poj刷题指南

    网上整理的一些poj刷题指南。 poj地址:http://poj.org

    poj部分水题代码

    POJ 2703:选择出行方式 **题目概述**: 本题目旨在通过编程的方式解决一个实际问题——选择最佳出行方式(步行或骑自行车)。题目给出了一种算法来决定在不同条件下应该采取哪种出行方式。 **代码解析**: - **...

    poj题目分类

    * 类型 DP:例如 poj3267、poj1836、poj1260、poj2533。 中级 1. 基本算法: * C++的标准模版库的应用:例如 poj3096、poj3007。 * 较为复杂的模拟题的训练:例如 poj3393、poj1472、poj3371、poj1027、poj2706...

    poj 1191 经典dp 源代码

    根据标题“poj 1191 经典dp 源代码”和描述中的信息,可以推测此题目是一个经典的动态规划问题。题目要求通过划分一个二维矩阵为多个不重叠的矩形区域,使得每个矩形区域的平均值与整体平均值之差的平方和最小。这个...

    acm新手刷题攻略之poj

    ### ACM新手刷题攻略之POJ ... - 推荐题目:[poj1860](https://vjudge.net/problem/POJ-1860)、[poj3259](https://vjudge.net/problem/POJ-3259)、[poj1062](https://vjudge.net/problem/POJ-1062)、[poj2253]...

    POJ算法题目分类

    * 型如下表的简单 DP:型如下表的简单 DP 是指解决问题的简单 DP 算法,如 poj3267、poj1836、poj1260、poj2533。 * 计算几何学:计算几何学是指解决问题的计算几何学算法,如 poj2031、poj1039。 六、数学 数学...

    poj:在poj.org上做的一些算法题

    【标题】"poj.org算法题解集合"是关于在poj.org平台上解决的各种算法问题的集合,这个资源主要是为了帮助编程爱好者和学习者提升算法技能。poj.org是一个著名的在线编程竞赛平台,它提供了丰富的算法题目供用户实践...

    poj 3342(树状dp)

    ### Poj 3342 (树状DP) #### 题目背景 这是一道典型的树状动态规划问题,来源于POJ平台编号为3342的题目。题目描述了一个公司的组织结构,并提出了一种特定场景下的最优解求法。 #### 题目解析 在题目描述中提到...

    poj训练计划.doc

    - 简单DP:如`poj3267, poj1836`。 - **数学** - 组合数学:如`POJ3252, poj1850`。 - 数论:如`poj2635, poj3292`。 #### 第二阶段中级训练计划 #### 第3周至第4周(共85题) - **进阶算法** - C++标准模版...

    poj_3613解题报告

    2遍dp poj_3613解题报告 poj_3613解题报告

    POJ1015-Jury Compromise【动态规划DP】

    【标题】"POJ1015-Jury Compromise" 是一个编程竞赛题目,主要涉及的是动态规划(Dynamic Programming, 简称DP)的算法应用。动态规划是一种解决复杂问题的有效方法,它通过将问题分解成子问题,并存储子问题的解来...

    poj_dp分类

    ### poj_dp分类解析 #### 概述 在本篇文章中,我们将深入探讨并解析PoJ (Pacific Ocean Judger) 平台上与动态规划(Dynamic Programming, DP)相关的题目分类及其特征。通过这些题目,读者可以更好地理解动态规划的...

    二分图匹配题解1

    1. POJ1274: 农夫John的高科技谷仓问题实质上是一个二分图的最大匹配问题。奶牛和畜栏分别代表二分图的两边,如果一头奶牛可以去某个畜栏产奶,那么就在它们之间建立边。目标是找到最大的匹配数,即最多可以同时有...

Global site tag (gtag.js) - Google Analytics