1 solutions
-
0
C++ :
#include<iostream> #include<cstring> #include<climits> #include<algorithm> using namespace std; int a[5004]; int dp_len[5004]; int dp_cnt[5004]; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; while(cin>>n) { for(int i = 1; i <= n; i++)cin>>a[i]; a[0] = INT_MAX; memset(dp_len, 0, sizeof dp_len); memset(dp_cnt, 0, sizeof dp_cnt); int ans_len = -1, ans_cnt = 0; for(int i = 1; i <= n; i++) { for(int j = 0; j < i; j++) { if(a[i] < a[j]) { dp_len[i] = max(dp_len[j] + 1, dp_len[i]); } } if(ans_len < dp_len[i]){ ans_len = dp_len[i]; } } dp_cnt[0] = 1; for(int i = 1; i <= n; i++) { for(int j = i - 1; j >= 0; j--) { if(dp_len[i] == dp_len[j] && a[i] == a[j]){ break; } if(dp_len[i] == dp_len[j] + 1 && a[i] < a[j]) { dp_cnt[i] += dp_cnt[j]; } } if(dp_len[i] == ans_len) ans_cnt += dp_cnt[i]; } cout<<ans_len<<" "<<ans_cnt<<endl; } return 0; }
- 1
Information
- ID
- 18979
- Time
- 1000ms
- Memory
- 30MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By