1 条题解
-
0
C :
#include<stdio.h> int main() { int i,j,k,n,x[101],y[101],t,temp; while(scanf("%d",&n)==1) { t=0; for(i=0;i<n;i++) scanf("%d",&x[i]); for(i=0;i<n;i++) { temp=0; for(j=0;j<101;j++) y[j]=240; y[0]=y[n]=-1; for(j=0;j<i;j++) { k=0; while(x[j]>y[k]) { if(x[j]>y[k]&&x[j]<y[k+1])y[k+1]=x[j]; k++; } } for(j=i;j>0;j--)if(x[i]>y[j]){temp=j;break;} for(j=n-1;j>i;j--) { k=n; while(x[j]>y[k]) { if(x[j]>y[k]&&x[j]<y[k-1])y[k-1]=x[j]; k--; } } for(j=i+1;j<n;j++)if(x[i]>y[j]){temp+=n-j;break;} if(t<temp)t=temp; } printf("%d\n",n-t-1); } return 0; }
C++ :
#include <stdio.h> #include <string.h> int i,j; int n; int left[102], right[102]; int arr[250]; void init_left() { for (i = 0; i < n; ++ i) { int max = 1; for (j = 0; j < i; ++ j) { if (arr[i] > arr[j]) max = max > left[j] + 1 ? max : left[j] + 1; } left[i] = max; } } void init_right() { for (i = n - 1; i >= 0; -- i) { int max = 1; for (j = i + 1; j < n; ++ j) { if (arr[i] > arr[j]) { if(max<=right[j]+1) { max=right[j]+1; } } // max = max > right[j] + 1 ? max : right[j] + 1; } right[i] = max; } } int init() { if (scanf("%d", &n) == EOF) return 0; for (i = 0; i < n; ++ i) scanf("%d", &arr[i]); return 1; } int solve() { int i,temp; init_left(); init_right(); int min = n; for (i = 0; i < n; ++ i) { temp = n - (left[i] + right[i] - 1); if(min>=temp) { min=temp; } //min = min < temp ? min : temp; } return min; } int main() { // freopen("ininin.txt","r",stdin); // freopen("out.out","w",stdout); while (init()!=0) { printf("%d\n", solve()); } return 0; }
- 1
信息
- ID
- 2845
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者