1 条题解
-
0
C++ :
#include<iostream> using namespace std; int a[101]={0},b[101]={0},c[101]={0}; int main() { int n,i,j,max; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; for(i=1;i<=n;i++) { b[i]=1; for(j=1;j<=i-1;j++) if(a[i]>a[j]&&b[j]+1>b[i]) b[i]=b[j]+1; } for(i=n;i>=1;i--) { c[i]=1; for(j=i+1;j<=n;j++) if(a[j]<a[i]&&c[j]+1>c[i]) c[i]=c[j]+1; } max=0; for(i=1;i<=n;i++) if(b[i]+c[i]>max) max=b[i]+c[i]; cout<<n-max+1; return 0; }
Java :
import java.util.Scanner; public class Main { public static int MAX_N = 105; public static int a[] = new int[MAX_N]; public static int dp1[] = new int[MAX_N]; public static int dp2[] = new int[MAX_N]; public static void main(String args[]) { Scanner in = new Scanner(System.in); int n = in.nextInt(); for(int i=1;i<=n;i++){ a[i] = in.nextInt(); } dp1[1] = 0; for(int i=1;i<=n;i++) for(int j=1;j<i;j++) if(a[i] > a[j]) dp1[i] = max(dp1[i],dp1[j]+1); for(int i=n;i>=1;i--) for(int j=n;j>i;j--) if(a[i] > a[j]) dp2[i] = max(dp2[i],dp2[j]+1); int mmax = 0; for(int i=1;i<=n;i++) mmax = max(mmax,dp1[i]+dp2[i]); System.out.println(n-mmax-1); } public static int max(int a,int b){ return a>b?a:b; } }
- 1
信息
- ID
- 1095
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者