1 条题解
-
0
C :
#include<stdio.h> int a[100000]; int dp1[100000]; int dp2[100000]; int max(int a,int b) { return a>b?a:b; } int main() { int s=1; char z; dp1[1]=dp2[1]=1; while(~scanf("%d",&a[s])) { s++; z=getchar(); if(z=='\n')break; dp1[s]=dp2[s]=1; } int max1=0,max2=0; for(int i=1;i<s;i++) for(int j=i-1;j>=1;j--) { if(a[i]<=a[j])dp1[i]=max(dp1[i],dp1[j]+1); else dp2[i]=max(dp2[i],dp2[j]+1); if(dp1[i]>max1)max1=dp1[i]; if(dp2[i]>max2)max2=dp2[i]; } printf("%d\n%d\n",max1,max2); return 0; }
C++ :
#include<iostream> #include<algorithm> #include<cstring> #include<ctime> #include<cmath> #include<vector> #include<string> #include<cstdio> using namespace std; int h[100000], a[100000]; int main() { //freopen("E.txt", "r", stdin); int i = 0, tmp; while(scanf("%d", &tmp) != EOF) { h[i] = tmp; a[i++] = tmp; } int ans = 0, res = 0; vector<int> v; for(int j = i - 1; j >= 0; --j) { if(v.empty()) v.push_back(a[j]); else { if(a[j] >= v[v.size()-1]) v.push_back(a[j]); else { int p = upper_bound(v.begin(), v.end(), a[j]) - v.begin(); v[p] = a[j]; } } } // for(int i = 0; i < v.size(); ++i) cout<<v[i]<<" ";cout<<endl; ans = v.size(); for(int j = i - 1; j >= 0; --j) { while(h[j] == -1) --j; if(j == -1) break; res++; int t = h[j]; h[j] = -1; for(int k = j - 1; k >= 0; --k) { if(h[k] >= t) t = h[k], h[k] = -1; } } cout<<ans<<endl<<res<<endl; return 0; }
- 1
信息
- ID
- 283
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 1
- 上传者