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

Luogu

 

Description

求一个长度为n的序列a的最长下降子序列的长度,以及这个长度的子序列种数,注意相同的几个子序列只能算作一个子序列.

n<=5000,a[i]不超过long范围

 

Sol

求最长下降子序列的长度: 1.f[i]表示以a[i]结尾的最长下降子序列长度

             2.f[i]表示以i结尾的最长下降子序列长度

第一种适用于n比较小的,第二种则适用于n大而a[i]小的,这题显然用第一种吧,而且第一种更方便计数

用num[i]表示以a[i]结尾的长度为f[i]的子序列个数

还需注意的是,这题要去重.

所以更新num[i]数组,j从1循环到i-1时,遇到a[i]==a[j]&&f[i]==f[j]的情况num[i]-=num[j]就好了

因为,在这样的情况中,num[j]所记录的子序列一定也被包含在num[i]中

 

Code

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #define Rg register
 5 #define il inline
 6 #define db double
 7 #define ll long long
 8 #define mem(a,b) memset(a,b,sizeof(a));
 9 #define go(i,a,b) for(Rg int i=a;i<=b;++i)
10 #define yes(i,a,b) for(Rg int i=a;i>=b;--i)
11 using namespace std;
12 il int read()
13 {
14     int x=0,y=1;char c=getchar();
15     while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
16     while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+c-'0';c=getchar();}
17     return x*y;
18 }
19 const int N=5001;
20 int n,ans1,p[N],l[N];//price length
21 db ans2,nm[N];//number
22 int main()
23 {
24     n=read();
25     go(i,1,n)p[i]=read(),l[i]=1;
26     go(i,1,n)
27     {
28         go(j,1,i-1)if(p[j]>p[i])l[i]=max(l[i],l[j]+1);
29         if(l[i]==1)nm[i]=1;
30         go(j,1,i-1)
31         {
32             if(p[i]==p[j]&&l[i]==l[j])nm[i]-=nm[j];
33             if(p[j]>p[i]&&l[j]+1==l[i])nm[i]+=nm[j];
34         }
35     }
36     go(i,1,n)if(l[i]>ans1)ans1=l[i];
37     go(i,1,n)if(l[i]==ans1)ans2+=nm[i];
38     printf("%d %.0lf\n",ans1,ans2);
39     return 0;
40 }
View Code

 

 

转载于:https://www.cnblogs.com/forward777/p/11010126.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阻塞和非阻塞通信

同步、异步、阻塞和非阻塞是几种基本的sockets调用方式&#xff0c;也是在进行网络编程时需要理解和区分的基本概念之一。关于这方面的文章和讨论相当丰富&#xff0c;这里着重讨论其中两个比较容易混淆的两个&#xff0c;即非阻塞与异步的关系。 先还是简单所列一下几中调用方…

我和《Visual c++2013入门经典(第7版)》的那些事

前言 笔者今天有幸看到了Visual c2013入门经典&#xff08;第7版&#xff09;&#xff0c;这一本书&#xff0c;回想之前看过些书的2010的版本&#xff0c;陪伴我渡过了漫长的C基础学习之路&#xff0c;下面我将讲述对《Visual c2013入门经典&#xff08;第7版&#xff09;》看…

oracle中的mount是什么意思,oraclenomountmountopen直接的关系

startup nomount startup mount startup open (startup的默认选项) 其他常用的参数&#xff1a;read only ,read write ,force,restrict 这些参数可以一起使用,比如 startup 与 startup open read write 是一样的效果。 Oracle的启动过程&#xff1a;启动实例 - 装载数据库 - 打…

JavaScript中的各种宽高以及位置总结

在javascript中操作dom节点让其运动的时候&#xff0c;常常会涉及到各种宽高以及位置坐标等概念&#xff0c;如果不能很好地理解这些属性所代表的意义&#xff0c;就不能理解js的运动原理&#xff0c;同时&#xff0c;由于这些属性概念较多&#xff0c;加上浏览器之间 实现方式…

C# 制作Com组件:java调用.net DLL的方法

本文将详细为大家介绍一个java调用.net DLL的方法&#xff0c;以实现特殊的客户的特殊要求&#xff1a;“在Java项目中必须使用其提供的用.net写的DLL加密机制&#xff01;” 环境与工具&#xff1a; ◆.net framework 3.5 C# ◆java jdk1.5&#xff0c; Tomcat 5.5 ◆jacob-1.…

MySQL 8.0索引合并

简介参考https://dev.mysql.com/doc/refman/8.0/en/index-merge-optimization.html#index-merge-intersection。索引合并是通过多个range类型的扫描并且合并它们的结果集来检索行的。仅合并来自单个表的索引扫描&#xff0c;而不是跨多个表的索引扫描。合并会产生底层扫描的三种…

linux开通80端口命令,Linux iptables开启80端口

Linux下安装好apache的时候访问IP 发现无法访问!以为安装失败了&#xff0c;于是测试apache 监听的端口80#netstat -lnt |grep 80tcp 0 0 :::80 :::* LISTEN安装成功了&#xff01;想到用本机telnet IP 80不通- - 但…

linux匿名页 文件页,文件页和匿名页

文件页和匿名页文件页内存回收, 也就是系统释放掉可以回收的内存, 比如缓存和缓冲区, 就属于可回收内存. 它们在内存管理中, 通常被叫做文件页 (File-backed Page). 大部分文件页, 都可以直接回收, 以后有需要时, 再从磁盘重新读取就可以了.脏页那些被应用程序修改过, 并且暂时…

第十五周学习总结

学习时间15h      代码行数400行博客数2篇学习内容这周主要做了php大作业的项目&#xff0c;添加了购物车和订单&#xff0c;管理员管理订单的功能&#xff0c;主要运用了session来储存纸&#xff0c;再用session时&#xff0c;必须前面添加session_star();且前面不能有输…

科学家研究:生女有撇步 多钙少碰香蕉

&#xff08;联合早报网讯&#xff09;台湾自由时报报道&#xff0c;科学家研究指出&#xff0c;育龄妇女若想生女孩&#xff0c;应该戒吃香蕉&#xff0c;多吃豆类与硬起司&#xff0c;以及排卵前后数天禁欲&#xff1b;要是能恪守上述规范&#xff0c;日后弄瓦而非弄璋的成功…

服务端配置实现AJAX跨域请求

2019独角兽企业重金招聘Python工程师标准>>> 一直以为AJAX跨域是无法逾越的鸿沟&#xff0c;最近发现原来在服务端可以通过发送header信息来允许AJAX跨域请求。 PHP代码示例&#xff1a; header(Access-Control-Allow-Origin:*); header(Access-Control-Allow-Hea…

linux系统的运行定义在,Linux系统运行级管理

运行级的概念来自SystemV运行级别将启动过程分成不同的集合每个集合包含一组脚本当init程序切换运行级到对应的级别时相应的脚本就被触发切换运行级可以通过执行init[级别号]完成(比如在Linux中runlevel代表reboot所以执行init就会引起系统重新启动)下面是一个标准的Linux的/et…

【翻译】怎样使用css制作迷人的button

英文原文&#xff1a;How to make sexy buttons with css 作者&#xff1a;Alex 这是一个教程&#xff0c;作者Alex一步步地叫我们怎样使用css来制作一个迷人的按钮&#xff0c;看后觉得挺好&#xff0c;很想大家都看看&#xff0c;翻译的可能稍有不妥&#xff0c;望谅解…… 这…

猜数游戏,随机目标数字,直到猜中退出

/* 猜数游戏&#xff08;其三&#xff1a;目标数字是0~999的随机数&#xff09;*/#include <time.h> #include <stdio.h> #include <stdlib.h>int main(void) {int no; /* 读取的值 */int ans; /* 目标数字 */srand(time(NULL)); /* 设定随…

Linux内核分析(三)----初识linux内存管理子系统

原文:Linux内核分析&#xff08;三&#xff09;----初识linux内存管理子系统Linux内核分析&#xff08;三&#xff09; 昨天我们对内核模块进行了简单的分析&#xff0c;今天为了让我们今后的分析没有太多障碍&#xff0c;我们今天先简单的分析一下linux的内存管理子系统&#…

linux交叉编译静态,使用静态链接在Linux上交叉编译Windows的GLUT项目

我正在尝试交叉编译这个最小的GLUT程序&#xff1a;#include int main(int argc, char **argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);glutCreateWindow("Cross-compile testing");glutMainLoop();return 0;}我使用的…

Python笔记(十五)_异常处理

try-except语句 try: 被检测代码 except Exception [as reason]: 出现异常后的处理代码 例&#xff1a; >>>try: sum 11 fopen(未定义文件.txt) print(f.read()) f.close except OSError as reason: print(文件出错啦&#xff01;错误原因&#xff1a; str(reason))…

配置左菜单控制点

IsModuleAdmin!"1"&ISSYSTEMDBA!"1"1.判断是否模块管理员 2.判断是否系统管理员转载于:https://www.cnblogs.com/sheme/archive/2010/10/07/1845196.html

为MFC中的ListBox添加水平滚动条

我们知道&#xff0c;MFC中的水平滚动条并不像垂直滚动条那样的智能。当文字超出ListBox的宽度时&#xff0c;水平滚动条并不会自己出现&#xff0c;我们需要手动的调用CListBox中的函数SetHorizontalExtent设置宽度&#xff0c;单位为像素。 我们可以自己添加智能水平滚动条&a…

linux常用高级命令,Linux常用高级文件操作命令

Linux常用高级文件操作命令 cat 查看文本#cat 文件名 打印文件内容到当前屏幕上#cat -n 文件名 显示行号#cat gt;Linux常用高级文件操作命令cat 查看文本#cat 文件名 打印文件内容到当前屏幕上#cat -n 文件名 显示行号#cat > a.txt 可以用这种方法修改或…