题解 【POJ1952】 BUY LOW, BUY LOWER
题目意思:
给你一个长度为\(n\)(\(1<=n<=5000\))的序列,并求出最长下降子序列的长度及个数,
并且,如果两个序列中元素的权值完全相同,那么即使它们的位置不一样,也只算一种情况.
解析
长度应该都能轻松求出来吧.
然而,情况数却有点难求啊..
其实主要是去重(要不然用计数\(DP\)也能过)...
但仔细想想,
首先,我们设\(f[i]\)为以\(i\)结尾的最长下降子序列的长度,
\(s[i]\)为以\(i\)结尾的最长上升子序列的个数.
那么对于两个权值相同的元素\(i\),\(j\),且\(i<j\),\(f[i]=f[j]\)(若不等于则不可能造成影响),
那么,以\(i\)结尾的序列,都能用\(j\)替换\(i\),
即\(s[i]\)的情况都会计算到\(s[j]\)中,
所以,在计算\(j\)的时候,将所有\(a[i](\)即权值\()=a[j]\),且\(f[i]=f[j]\)的\(s[i]\)都减掉就行了,
最后,上代码吧:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
inline int read(){
int sum=0,f=1;char ch=getchar();
while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
return f*sum;
}
int n,a[100001],ans,ret;
int s[100001],f[100001];
int main(){
n=read();
s[0]=1;
for(int i=n;i;i--) a[i]=read();//倒过来也就变成了最长上升子序列,仅仅是个人习惯
for(int i=1;i<=n;i++){
int len=0;
for(int j=1;j<i;j++){
if(a[i]>a[j]) len=max(len,f[j]);
}
f[i]=len+1;
for(int j=0;j<i;j++){
if(f[j]==len&&a[j]<a[i]) s[i]+=s[j];
}
for(int j=0;j<i;j++) if(a[i]==a[j]&&f[j]==f[i]) s[i]-=s[j];//去重
}
for(int i=1;i<=n;i++) ans=max(ans,f[i]);//寻找最长子序列
for(int i=1;i<=n;i++) if(f[i]==ans) ret+=s[i];//统计答案
printf("%d %d\n",ans,ret);
return 0;
}
题解 【POJ1952】 BUY LOW, BUY LOWER的更多相关文章
- [POJ1952]BUY LOW, BUY LOWER
题目描述 Description The advice to "buy low" is half the formula to success in the bovine stoc ...
- POJ-1952 BUY LOW, BUY LOWER(线性DP)
BUY LOW, BUY LOWER Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 9244 Accepted: 3226 De ...
- poj1952 BUY LOW, BUY LOWER【线性DP】【输出方案数】
BUY LOW, BUY LOWER Time Limit: 1000MS Memory Limit: 30000K Total Submissions:11148 Accepted: 392 ...
- POJ 1952 BUY LOW, BUY LOWER 动态规划题解
Description The advice to "buy low" is half the formula to success in the bovine stock mar ...
- USACO Section 4.3 Buy low,Buy lower(LIS)
第一眼看到题目,感觉水水的,不就是最长下降子序列嘛!然后写……就呵呵了..要判重,还要高精度……判重我是在计算中加入各种判断.这道题比看上去麻烦一点,但其实还好吧.. #include<cstd ...
- USACO 4.3 Buy Low, Buy Lower
Buy Low, Buy Lower The advice to "buy low" is half the formula to success in the stock mar ...
- 洛谷P2687 [USACO4.3]逢低吸纳Buy Low, Buy Lower
P2687 [USACO4.3]逢低吸纳Buy Low, Buy Lower 题目描述 “逢低吸纳”是炒股的一条成功秘诀.如果你想成为一个成功的投资者,就要遵守这条秘诀: "逢低吸纳,越低越 ...
- Buy Low, Buy Lower
Buy Low, Buy Lower 给出一个长度为N序列\(\{a_i\}\),询问最长的严格下降子序列,以及这样的序列的个数,\(1 <= N <= 5000\). 解 显然我们可以很 ...
- BUY LOW, BUY LOWER_最长下降子序列
Description The advice to "buy low" is half the formula to success in the bovine stock mar ...
随机推荐
- 【Python】【demo实验16】【练习实例】【打印所有水仙花数】
题目: 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数",因为153= ...
- Fiddler之常用操作(过滤器设置,代理设置,手机抓包设置,手机代理配置)
记录下,工作中常用的一些设置和操作~ 1.过滤“脏”请求 两个下拉框的名词解释: A.内外网过滤 No Zone Filter:不分区域过滤(内网外网都显示) Show only Intranet H ...
- 《深入理解 Java 虚拟机》学习 -- 垃圾回收算法
<深入理解 Java 虚拟机>学习 -- 垃圾回收算法 1. 说明 程序计数器,虚拟机栈,本地方法栈三个区域随线程而生,随线程而灭,这几个区域的内存分配和回收都具备确定性 Java 堆和方 ...
- C#进阶之泛型(Generic)
1.泛型 泛型是framwork2.0推出的新语法,具有延迟声明的特点:把参数类型的声明推迟到调用的时候.泛型不是一个语法糖,是框架升级提供的功能.需要编辑器和JIT(just-in-time com ...
- vue进阶:基于vue-cli创建项目(搭建手脚架)
vue-cli安装.创建项目 基于vue-cli创建的项目进行开发 使用vue-cli图形化界面搭建项目 插件与工具 一.vue-cli简介.安装.创建项目 Vue-cli是基于Vue.js进行快速开 ...
- Linux--目录属性
目录的读属性:表示具有读取目录结构清单的权限.使用ls命令可以将该目录中的文件和子目录的内容列出来. 目录的写属性:表示具有更改目录结构清单的权限.包括以下操作: 建立新的文件与目录 删除已经存在的文 ...
- curl命令用法
curl命令是一个功能强大的网络工具,它能够通过http.ftp等方式下载文件,也能够上传文件,同时支持HTTPS等众多协议,还支持POST.cookies.认证.从指定偏移处下载部分文件.用户代理字 ...
- 编辑docker容器中的文件
一般docker中没有VI或者其它相应的文本编辑器,为了写个东西安装个vi就可以解决问题,除此之外还有别的办法 登陆docker中找到需要编辑的文件的位置 sudo docker ps -a sudo ...
- Java学习笔记【十二、网络编程】
原计划的学习结束时间是3月4日,目前看来已经延迟了,距离低标还差一些,多方面原因,也不找借口,利用周末赶赶进度,争取本周末把低标完成吧! 参考: http://www.runoob.com/java/ ...
- 招商银行网银在Mac上装了插件仍然无法登录
1 装完插件后,在登录页面重新载入插件,再次打开