列表

详情


NC18281. 旅行青蛙

描述

一只青蛙出去旅游,因为中国有一句古话说的好:“由简入奢易,由奢入俭难”,所以这只青蛙当看的当前景点比前面看过的景点差的时候,青蛙就会说“不开心”为了避免这只青蛙说“不开心”,并且使青蛙看的景点尽量的多,所以他请你帮忙给他安排一条线路,使青蛙可以看到尽量多的景点,并且不走回头路。

输入描述

第一行为一个整数n,表示景点的数量
接下来n行,每行1个整数,分别表示第i个景点的质量

输出描述

一个整数,表示青蛙最多可以看到几个景点

示例1

输入:

10
3
18
7
14
10
12
23
30
16
24

输出:

6

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 691ms, 内存消耗: 652K, 提交时间: 2020-10-09 22:05:01

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n;
	cin>>n;
	vector<int> a(n+1,0),b(n+1,0);
	int t=0;
	for(int i=1; i<=n; i++) {
		cin>>a[i];
		for(int j=i-1; j>=0; j--) 
			if(a[i]>=a[j]) 
				b[i]=max(b[j]+1,b[i]);
		t=max(b[i],t);
	}
	cout<<t<<endl;
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 17ms, 内存消耗: 888K, 提交时间: 2018-08-29 20:25:07

#include<bits/stdc++.h>
int a,n,ans,k,g[100005];
int main(){
    std::cin>>n; memset(g,0x3f,sizeof g);
    for(int i=1;i<=n;i++) std::cin>>a,g[k=std::upper_bound(g+1,g+1+n,a)-g]=a,ans=std::max(ans,k);
    std::cout<<ans;return 0;
}

pypy3 解法, 执行用时: 1406ms, 内存消耗: 24968K, 提交时间: 2023-03-31 12:36:49

n = int(input())
nlist = []
for _ in range(n):
    a = int(input())
    nlist.append(a)
dp = [1]*n
for i in range(n):
    for k in range(i):
        if nlist[i] >= nlist[k]:
            dp[i] = max(dp[i],dp[k]+1)
print(max(dp))   

上一题