제출 #1285644

#제출 시각아이디문제언어결과실행 시간메모리
1285644Faisal_SaqibMoney (IZhO17_money)C++20
45 / 100
136 ms580 KiB
#include <bits/stdc++.h> using namespace std; const int N=400; bool dp[N][N],seen[N]; int a[N],valid[N]; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; valid[i]=i; if(a[i-1]<=a[i]) { valid[i]=valid[i-1]; } } dp[0][0]=1; for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) { set<int> vis; for(int ip=0;ip<i;ip++) { vis.insert(a[ip]); // 0 for ip=0 thus will not intersect any range auto it=vis.upper_bound(a[ip+1]); // there can be elements equal to a[ip+1] but give no fk if((1+ip)>=valid[i] and (it==end(vis) or *it>=a[i])) // >= or > ? idk { dp[i][j]|=dp[ip][j-1]; } } } } for(int j=1;j<=n;j++) { if(dp[n][j]) { cout<<j<<endl; return 0; } } // cout<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...