luogu1108
来源:互联网 发布:第四套人民币淘宝 编辑:程序博客网 时间:2024/06/10 22:49
// luogu 1108 最长下降子序列 n^2
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 5010;
long long int price[N];
int dp[N],ans,n,total = 0; //dp[i]表示第i天的最大值
int main(){
//memset(g,0,sizeof(g));
memset(dp,0,sizeof(dp));
scanf("%d",&n); //n 天数
for(int i = 1;i <= n;i++){
scanf("%d",&price[i]);
}
for(int i = 1;i <= n;i++){
dp[i] = 1;
for(int j = 1;j < i;j++){
if(price[i] < price[j]){
dp[i] = max(dp[i],dp[j] + 1);
}
}
ans = max(ans,dp[i]);
}
//去重
int g[N]; //dp[j]表示以j为长度的最长的
memset(g,0,sizeof(g));
for(int i = 1;i <= n;i++){
if(dp[i] == 1) g[i] = 1; // 之前保留的dp[i]已经没有作用了,毕竟我们保留了最大的ans
for(int j = 1;j < i;j++){
if(price[i] == price[j] && dp[i] == dp[j]) g[j] = 0; // 显然的去重
if(price[i] < price[j] && dp[i] == dp[j]+1) g[i] += g[j]; //如果找到这样的一个a[i] < a[j] 而且i是直接由j转移来的,那么就直接加上就好啦
}
}
//int total = 0;
for(int i = 1;i <= n;i++){
if(dp[i] == ans){
total += g[i];
}
}
printf("%d %d",ans,total);
return 0;
}
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 5010;
long long int price[N];
int dp[N],ans,n,total = 0; //dp[i]表示第i天的最大值
int main(){
//memset(g,0,sizeof(g));
memset(dp,0,sizeof(dp));
scanf("%d",&n); //n 天数
for(int i = 1;i <= n;i++){
scanf("%d",&price[i]);
}
for(int i = 1;i <= n;i++){
dp[i] = 1;
for(int j = 1;j < i;j++){
if(price[i] < price[j]){
dp[i] = max(dp[i],dp[j] + 1);
}
}
ans = max(ans,dp[i]);
}
//去重
int g[N]; //dp[j]表示以j为长度的最长的
memset(g,0,sizeof(g));
for(int i = 1;i <= n;i++){
if(dp[i] == 1) g[i] = 1; // 之前保留的dp[i]已经没有作用了,毕竟我们保留了最大的ans
for(int j = 1;j < i;j++){
if(price[i] == price[j] && dp[i] == dp[j]) g[j] = 0; // 显然的去重
if(price[i] < price[j] && dp[i] == dp[j]+1) g[i] += g[j]; //如果找到这样的一个a[i] < a[j] 而且i是直接由j转移来的,那么就直接加上就好啦
}
}
//int total = 0;
for(int i = 1;i <= n;i++){
if(dp[i] == ans){
total += g[i];
}
}
printf("%d %d",ans,total);
return 0;
}
阅读全文
0 0
- luogu1108
- [luogu1108&2687][USACO4.3]Buy Low, Buy Lower(STL乱搞+高精度)
- 编译原理与编译构造 课堂笔记1 导论
- Android的线程消息机制(Handler机制剖析)
- git 使用
- 什么是选择器?
- jzoj5342 赤壁情 (序列插入型dp,笛卡尔树新奇姿势dp)
- luogu1108
- HDU 1003:Max Sum(简单dp)
- 2017.09.02【NOIP提高组】模拟赛B组
- C 文件读写(以判断闰年为例)
- 一些笔试题小汇总
- ionic应用程序跳转其它网站地址实现(themeablebrowser)相当于WebView
- Python Challenge笔记
- struts2是单例的吗
- MMORPG服务器架构