51 nod 1153 选择子序列
这个题的题意好难说啊,a[b[i]]要从大到小,直接dfs就行了。
#include<bits/stdc++.h> #define fp(i,a,b) for(int i=a;i<=b;i++) typedef long long ll; typedef double dl; using namespace std; const int N=1e5+7; const ll M=1e9+7; const int INF=0x3f3f3f3f; int n,m; int a[N]; int dfs(int l,int r) { if(l == r) return 1; else if(l > r) return 0; int maxn=-0x3f3f3f3f,mid; for(int i=l;i<=r;i++) { if(a[i]>maxn) { maxn=a[i]; mid=i; } } return max(dfs(l,mid-1),dfs(mid+1,r))+1; } void solve() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); int ans=dfs(1,n); printf("%d\n",ans); } int main() { //ios::sync_with_stdio(0); //cin.tie(0),cout.tie(0); //int T; scanf("%d",&T) //for(int i=1;i<=T;i++) solve(); }