1 solutions

  • 0
    @ 2024-12-11 0:49:29

    C :

    #include<stdio.h>
    #include<string.h>
    int f[1005], a[1005];
    int max(int a,int b)//返回较大值
    {
        return(a > b? a:b);
    }
    
    int main()
    {
        int n,i,k;
        scanf("%d",&n);
        memset(f, 0, sizeof(f));// 快速初始化的 (数组的首地址, 要置成的值, sizeof(数组名)(空间大小))
        for(i = 1; i <= n; ++i)
            scanf("%d", &a[i]);//输入每个数
    
        for(i = 1; i <= n; ++i)//遍历数组,处理第i个数
        {
            f[i] = 1;//每个子序列的最小长度是1,所以先置1
            for(k = 1; k < i; ++k)//遍历a[i]之前的数
            {
                if(a[k] < a[i])//如果第i个数之前有比a[i]小的数a[k],就将含第i个数的序列长度 和 第k个数(含)之前的序列长度
                {              //
                    f[i] = max(f[i], f[k] + 1);
                }
            }
        }
        int ans = -1;
        for(i = 1; i <= n; ++i)//寻找f[i]的最大值
        {
            ans = max(ans, f[i]);
        }
        printf("%d\n", ans);
        return 0;
    }
    
    

    C++ :

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int N(1005);
    int a[N],f[N];
    int main()
    {
    //    ifstream cin("exam3.in");
    //    ofstream cout("exam3.out");
        int n;
        cin>>n;
        for (int i=1;i<=n;i++) cin>>a[i];
        fill(f,f+n,1);
        for (int i=2;i<=n;i++)
            for (int j=1;j<i;j++)
                if (a[j]<a[i]&&f[j]+1>f[i])
                    f[i]=f[j]+1;
        int ans(1);
        for (int i=1;i<=n;i++)
            if (f[i]>ans)
                ans=f[i];
        cout<<ans<<endl;
       // system("pause");
        return 0;
    }
    

    Pascal :

    
    program lixinyi;
     var n,i,j,ans:longint;
         a,f:array[1..1000] of longint;
     begin
      readln(n);
      for i:= 1 to n do
      read(a[i]);
      f[1]:=1;
      for i:= 1 to n-1 do
      begin
      if f[i]=0 then f[i]:=1;
       for j:=i to n do
        if (a[j]>a[i])and(f[i]+1>f[j]) then
        f[j]:=f[i]+1;
      end;
      for i:= 1 to n do
      if f[i]>ans then ans:=f[i];
      writeln(ans);
     end.
    
    

    Java :

    import java.util.Scanner;
    
    
    public class Main {
    	static int M = 1005;
    	static int[] dp = new int[M];
    	static int n;
    	static int[] a = new int[M];
    
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		while (in.hasNextInt()) {
    			n = in.nextInt();
    			for (int i = 0; i < n; i++) {
    				a[i] = in.nextInt();
    			}
    			dp[0] = 1;
    			int max = Integer.MIN_VALUE;
    			for (int i = 1; i < n; i++) {
    				dp[i] = 1;
    				for (int j = 0; j < i; j++) {
    					if (a[j] < a[i] && dp[i] < dp[j] + 1)
    						dp[i] = dp[j] + 1;
    					if (max < dp[i])
    						max = dp[i];
    				}
    			}
    			System.out.println(max);
    		}
    	}
    }
    
    
    • 1

    Information

    ID
    731
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By