2 条题解

  • 0
    @ 2025-6-14 17:08:45
    
    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    const int N = 1100;
    int dp[N];		//dp[i]表示一第i个数为结尾的最长序列长度
    int a[N];		//用来存储数组
    
    signed main(){
    	ios::sync_with_stdio(false);
    	cin.tie(0) , cout.tie(0);
    	int n;
    	cin >> n;
    	for(int i = 1 ; i <= n ; i ++){
    		cin >> a[i];
    		dp[i] = 1;	//因为每一个数都可以单独作为一个不下降序列,长度即为1
    	}
    	for(int i = 1 ; i <= n ; i ++)
    		for(int j = 1 ; j < i ; j ++)
    			if(a[j] < a[i])
    				dp[i] = max(dp[i] , dp[j] + 1);
    	int ans = 0;
    	for(int i = 1 ; i <= n ; i ++)
    		ans = max(ans , dp[i]);
    	cout << ans << '\n';
    	return 0;
    }
    
    • 0
      @ 2024-4-11 19:46:15
      input = open(0).readline
      
      n = int(input())
      a = list(map(int,input().split()))
      dp = [0]*n + [0]
      for i in range(n):
          # 找比a[i]小的中dp最大的
          b = max(list(filter(lambda x:a[x] <= a[i], range(i))) or [-1],key=lambda a:dp[a])
          dp[i] = dp[b] + 1
      print(max(dp))
      
      • 1

      信息

      ID
      125
      时间
      1000ms
      内存
      256MiB
      难度
      5
      标签
      递交数
      343
      已通过
      122
      上传者