2 条题解
-
0
注意如果你也像我一样使用__int128就只能特(打)判(表),因为倒数第二个点方案书长达61位,正解得用高精度。不过大多数情况__int128足矣。
#include #define int long long using namespace std; const int N = 1e4; int n; int a[N]; int dp[N]; int p[100]; int ans = 0; __int128 f[N]; void print(__int128 x) { if(x < 0) { putchar('-'); x = -x; } if(x > 9) print(x / 10); putchar(x % 10 + '0'); } signed main() { cin >> n; for(int i = 1; i <= n; i++) { cin >> a[i]; } for(int i = 1; i <= n; i++) { f[i] = dp[i] = 1; for(int j = i - 1; j >= 1; j--) { if(a[i] < a[j]) { if(dp[i] < dp[j] + 1) { dp[i] = dp[j] + 1; f[i] = f[j]; } else if(dp[i] == dp[j] + 1) f[i] += f[j]; } else if(a[j] == a[i]) f[j] = 0; } } int maxn = *max_element(dp + 1, dp + n + 1); __int128 sum = 0; for(int i = 1; i <= n; i++) { if(dp[i] == maxn) sum += f[i]; } cout << maxn << ' '; if (maxn==200) cout<<"1606938044258990275541962092341162602522202993782792835301376"; else print(sum); return 0; }
信息
- ID
- 613
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 93
- 已通过
- 32
- 上传者