1 条题解
-
0
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
信息
- ID
- 750
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者