这道题一开始看感觉很简单,就一个降序问题,后来这个去重真是让我煞费苦心啊!!!注意b[]数组的作用

#include<iostream>
using namespace std;
int dp[5005];//记录降序长度
int a[5005];
int b[5005];//记录出显个数
int main()
{
 int n;
 while(cin>>n)
 {
  for(int i=0;i<5005;i++)
  {
   dp[i]=1;
   b[i]=1;
  }
  for(int i=0;i<n;i++)
  cin>>a[i];
  for(int i=1;i<n;i++)
  {
   for(int j=i-1;j>=0;j--)//注意顺序
   {
    if(a[i]<a[j])
    {
     if(dp[j]+1>dp[i])
     {
      dp[i]=dp[j]+1;
      b[i]=b[j];//当符合两个if条件的时候,注意将上一个出现次数复制下来
      
     }
     else
     if(dp[j]+1==dp[i])
     b[i]+=b[j];//当dp[j]+1==dp[i]时,意味着a[i]这个数将同一个长度又出现一次注意这时将次数加在一起
    }
    else
    if(a[i]==a[j])
    {
     if(dp[i]==1)//去重的关键,当在i到j之间如果没有dp[]使增加,意味着这个重复了,将其出现次数变为0
     b[i]=0;
     break;
    }   
   }
  }      
  int max=0;
  for(int i=0;i<n;i++)
  if(dp[i]>max)
  max=dp[i];
  int cou=0;
  for(int i=0;i<n;i++)
  if(dp[i]==max)
  cou+=b[i];
  cout<<max<<' '<<cou<<endl;
 }
 return 0;
}

poj 1952 BUY LOW, BUY LOWER dp 但去重真是令人纠结相关推荐

  1. POJ 1952 BUY LOW, BUY LOWER

    $dp$. 一开始想了一个$dp$做法,$dp[i][j]$表示前$i$个数字,下降序列长度为$j$的方案数为$dp[i][j]$,这样做需要先离散化然后用树状数组优化,空间复杂度为${n^2}$,时 ...

  2. $Poj1952\ $洛谷$1687\ Buy\ Low,Buy\ Lower$ 线性$DP+$方案计数

    Luogu Description 求一个长度为n的序列a的最长下降子序列的长度,以及这个长度的子序列种数,注意相同的几个子序列只能算作一个子序列. n<=5000,a[i]不超过long范围 ...

  3. USCACO Buy Low, Buy Lower

    求最长下降子序列简单,难点就是求序列的个数更难的就说处理重复序列.求个数代码还好理解判断重复就是从那个数字一直往前找如果找到一个和它相等的(假设这两个数字为ab),看看这两个数字之间有没有可以和后面数 ...

  4. buy low buy lower——伪思考

    过于追求编程数量,却忽略了最重要的方法过程的思考,结果必将是不会思考,还可能养成不爱思考的习惯. 代码 1 #include<stdio.h> 2 #include<stdlib.h ...

  5. 专题突破二之优先队列、st表——,Running Median,Sequence,Buy Low Sell High,数据备份,超级钢琴,ZQC的手办

    文章目录 Running Median Sequence Buy Low Sell High [APIO/CTSC 2007] 数据备份 [NOI2010] 超级钢琴 「LibreOJ β Round ...

  6. LeetCode Best Time to Buy and Sell Stock(dp)

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  7. POJ 1952 DP

    思路: 这题要求最长下降子序列的长度和个数,我们可以增加 数组maxlen[size](记录当前第1个点到第i个点之间的最长下降序列长度) 和maxnum[size](记录1~i之间的最长下降序列个数 ...

  8. CodeForces - 867E Buy Low Sell High (贪心 +小顶堆)

    https://vjudge.net/problem/CodeForces-867E 题意 一个物品在n天内有n种价格,每天仅能进行买入或卖出或不作为一种操作,可以同时拥有多种物品,问交易后的最大利益 ...

  9. [ CodeForces 865 D ] Buy Low Sell High

    \(\\​\) \(Description\) 给出\(N\)天股票的价钱\(A_1,...,A_N\),每天可以什么都不做,或者买入或卖出\(1\)支股票,分别花出或收入\(A_i\)元,求最大收益 ...

  10. 51nod 2206 低买高卖codeforces867E Buy Low Sell High 贪心+优先队列

    考虑股票市场,一共有n天. 对于第i天,B君知道股票的价格是每单位a[i]元 在每一天,B君可以选择买入一个单位的股票,卖出一个单位的股票,或者什么都不做. 刚开始B君有无穷多的钱,但是没有任何股票. ...

最新文章

  1. mysql连接,修改密码,增加用户,显示,导入导出
  2. 每个开发阶段对应的最流行的Java工具
  3. 为啥八位的计算机可以用补码表示-128
  4. ModBus的小于3.5S间隔的理解
  5. UI2Code智能生成Flutter代码——版面分析篇
  6. 用 as with ,和 ROW_NUMBER() 做分页查询
  7. 加州伯克利本科学计算机好吗,美国加州大学伯克利分校和卡耐基梅隆大学计算机科学CS专业哪个好?...
  8. 牛客练习赛29: F. 算式子
  9. Git合并特定commits 到另一个分支
  10. 基于go的微服务搭建(七) - 服务发现和负载均衡
  11. 矢量图svg转png的简单方法
  12. oracle for扫描行,请教索引范围扫描具体IO行为?
  13. 创始人之间应该如何量化分配股权?
  14. 第二课——如何有逼格地打字
  15. 1.Linux系统编程-进程
  16. 阿里企业邮箱设置过滤方法
  17. git revert回滚merge提交时报错(commit xxx is a merge but no -m option )
  18. 使用 canvas 画矩形,实现橡皮擦功能
  19. 用Web标准进行开发
  20. 网络问题 – bitbucket同步数据

热门文章

  1. word20161210
  2. 数据库,规则库和知识库的比较
  3. SharePoint快速调试技巧
  4. BZOJ1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏
  5. 卷积神经网络之迁移学习
  6. android省市区三级联动案例:(一)运行效果
  7. Reaction to 构造之法 of Software Engineering From The First Chapter toThe Fifth Chapter
  8. matlab中{} ()和[] 的区别 -
  9. 频率学派与贝叶斯学派的区别
  10. 软件再快不如自带:找不到电脑文件?教你这 3 个Mac搜索技巧